2017-11-18 160 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