首页 > 解决方案 > pd.to_datetime 上的未知字符串格式

问题描述

我有一个列日期如下的数据集:

cod           date              value 
0   1O8        2015-01-01 00:00:00    2.1
1   1O8        2015-01-01 01:00:00    2.3
2   1O8        2015-01-01 02:00:00    3.5
3   1O8        2015-01-01 03:00:00    4.5
4   1O8        2015-01-01 04:00:00    4.4
5   1O8        2015-01-01 05:00:00    3.2
6   1O9        2015-01-01 00:00:00    1.4
7   1O9        2015-01-01 01:00:00    8.6
8   1O9        2015-01-01 02:00:00    3.3
10  1O9        2015-01-01 03:00:00    1.5
11  1O9        2015-01-01 04:00:00    2.4
12  1O9        2015-01-01 05:00:00    7.2

dtypes日期是一个对象,用于在我需要将日期列类型更改为数据时间之后应用一些功能。我尝试了不同的解决方案,例如:

pd.to_datetime(df['date'], errors='raise', format ='%Y-%m-%d HH:mm:ss')
pd.to_datetime(df['date'], errors='coerce', format ='%Y-%m-%d HH:mm:ss')
df['date'].apply(pd.to_datetime, format ='%Y-%m-%d HH:mm:ss')

但错误只是一样的:

TypeError: Unrecognized value type: <class 'str'>
ValueError: Unknown string format

直接的事情是,如果我将 te 函数应用于数据集样本,该函数会正确响应,但如果我将其应用于所有数据集,则会退出错误。在数据中没有缺失值,并且所有值的 dtype 都相同。

我该如何解决这个错误?

标签: pythonpython-3.xpandasstringdatetime

解决方案


存在三个问题:

  1. pd.to_datetime并且pd.Series.apply不能就地工作,因此您的解决方案不会修改您的系列。转换后重新分配。
  2. 您的第三个解决方案需要errors='coerce'保证没有错误。
  3. 对于时间组件,您需要使用以 . 开头的特定字符串格式%

所以你可以使用:

df = pd.DataFrame({'date': ['2015-01-01 00:00:00', '2016-12-20 15:00:20',
                            '2017-08-05 00:05:00', '2018-05-11 00:10:00']})

df['date'] = pd.to_datetime(df['date'], errors='coerce', format='%Y-%m-%d %H:%M:%S')

print(df)

                  date
0  2015-01-01 00:00:00
1  2016-12-20 15:00:20
2  2017-08-05 00:05:00
3  2018-05-11 00:10:00

在这种特殊情况下,格式是标准的,可以省略:

df['date'] = pd.to_datetime(df['date'], errors='coerce')

推荐阅读