我有一个数据集,其列日期如下:
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
是一个对象,为了在我需要将日期列类型更改为datatime之后应用某些功能。我尝试不同的解决方案,例如:
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均相同。
如何解决此错误?
答案 0 :(得分:4)
存在三个问题:
pd.to_datetime
和pd.Series.apply
无法正常运行,因此您的解决方案不会修改您的系列。转换后再分配回来。errors='coerce'
以确保没有错误。%
开头的特定字符串格式。因此您可以使用:
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')
答案 1 :(得分:0)
我了解您例如从csv文件读取此数据。
df=pd.read_csv('c:/1/comptagevelo2012.csv', index_col=0, parse_dates=True)
要检查:
print(df.index)
比pd.to_datetime效果更好!!我检查了!
> DatetimeIndex(['2012-01-01', '2012-02-01', '2012-03-01', '2012-04-01',
> '2012-05-01', '2012-06-01', '2012-07-01', '2012-08-01',
> '2012-09-01', '2012-10-01',
> ...
> '2012-12-22', '2012-12-23', '2012-12-24', '2012-12-25',
> '2012-12-26', '2012-12-27', '2012-12-28', '2012-12-29',
> '2012-12-30', '2012-12-31'],
> dtype='datetime64[ns]', length=366, freq=None)
该文件不支持另一种方法。
df=pd.read_csv('c:/1/comptagevelo2012.csv',index_col=0)
pd.to_datetime(df['Date'], errors='coerce', format ='%d/%m/%Y')
print(df.index)
Index(['01/01/2012', '02/01/2012', '03/01/2012', '04/01/2012', '05/01/2012',
'06/01/2012', '07/01/2012', '08/01/2012', '09/01/2012', '10/01/2012',
...
'22/12/2012', '23/12/2012', '24/12/2012', '25/12/2012', '26/12/2012',
'27/12/2012', '28/12/2012', '29/12/2012', '30/12/2012', '31/12/2012'],
dtype='object', length=366)