2017-11-18 157 views
0

我有这样一个数据帧to_datetime时:错误使用熊猫

  Date Quote-Spread 
0 2013-11-17  0.010000 
1 2013-12-10  0.020000 
2 2013-12-11  0.013333 
3 2014-06-01  0.050000 
4 2014-06-23  0.050000 

当我使用此代码我提出一个错误:

import pandas as pd 
pd.to_datetime(df1['Date'] ,format ="%Y%m%d") 

ValueError: time data '2013-11-17' does not match format '%Y%m%d' (match) 

我怎样才能纠正这一错误?

回答

4

使用to_datetime只:

df1['Date'] = pd.to_datetime(df1['Date']) 
print (df1['Date']) 
0 2013-11-17 
1 2013-12-10 
2 2013-12-11 
3 2014-06-01 
4 2014-06-23 
Name: Date, dtype: datetime64[ns] 

或者,如果要指定格式添加-,因为%Y%m%d比赛YYMMDD和您的格式是YY-MM-DD

pd.to_datetime(df1['Date'], format ="%Y-%m-%d") 
2

to_datetime是要走的路。与使用列表理解或应用的替代方法相比,它是最快的。

import pandas as pd 
import datetime 

# Create dataset 
df1 = pd.DataFrame(dict(Date=['2013-11-17','2013-12-10']*10000)) 

ALT1,列表理解:

df1.Date = [datetime.datetime.strptime(i,"%Y-%m-%d") for i in df1.Date.values] 

ALT2,适用于:

df1.Date = df1.Date.apply(lambda x: datetime.datetime.strptime(x,"%Y-%m-%d")) 

ALT3,to_datetime:

df1.Date = pd.to_datetime(df1.Date) 

计时

1 loop, best of 3: 744 ms per loop #1 
1 loop, best of 3: 793 ms per loop #2 
100 loops, best of 3: 18.5 ms per loop #3 
+0

尝试为'pd.DataFrame(dict(Date = ['2013-11-17','2013-12-10'] * 10000))''谢谢。 – jezrael

+0

@jezrael是的,我做到了,结果相同。我会更新 –

+0

我第一次感到惊讶;)谢谢。 – jezrael