2014-01-14 87 views
5

我在熊貓to_datetime函數和日期時間中有一些困難。具體來說,to_datetime在應用於pandas系列時沒有任何默默地失敗,並且我不得不單獨明確地迭代每個值以使函數正常工作,即使(至少根據this SO question)兩者都應該工作相同。Pandas.to_datetime函數靜默失敗

In [81]: np.__version__ 
Out[81]: '1.6.1' 

In [82]: pd.__version__ 
Out[82]: '0.12.0' 

In [83]: a[0:10] 
Out[83]: 
0 8/31/2013 14:57:00 
1 8/31/2013 13:55:00 
2 8/31/2013 15:45:00 
3  9/1/2013 13:26:00 
4  9/1/2013 13:56:00 
5  9/2/2013 13:55:00 
6  9/3/2013 13:33:00 
7  9/3/2013 14:11:00 
8  9/3/2013 14:35:00 
9  9/4/2013 14:28:00 
Name: date_time, dtype: object 

In [84]: a[0] 
Out[84]: '8/31/2013 14:57:00' 

In [85]: a=pd.to_datetime(a) 

In [86]: a[0] 
Out[86]: '8/31/2013 14:57:00' 

In [87]: a=[pd.to_datetime(date) for date in a] 

In [88]: a[0] 
Out[88]: Timestamp('2013-08-31 14:57:00', tz=None) 

想到這是爲什麼?我似乎總體上遇到了這種數據問題,並且date_time列未被正確解析,我懷疑它可能與此失敗有關。

感謝,

戴夫

+0

是否爲'pd.to_datetime(A [0:10])'工作? – waitingkuo

+0

這似乎適用於我與1.7和熊貓0.12。 – joris

+0

考慮升級到numpy 1.7.1 – Jeff

回答

4

這已在新的熊貓中修復,默認錯誤kwarg是'提高'而不是'忽略'。
新的行爲是:

In [21]: pd.to_datetime(dates) # same as errors='raise' 
... 
ValueError: Given date string not likely a datetime. 

In [22]: pd.to_datetime(dates, errors="ignore") # the original problem 
Out[22]: 
0 1/1/2014 
1   A 
dtype: object 

也就是說,to_datetime不再失敗默默!

舊的答案是保持低於...


由於DaveA所指出的,在默認情況下to_datetime(檢查我的意見後)靜靜地失敗,如果有問題,並返回了最初的通過:

In [1]: dates = pd.Series(['1/1/2014', 'A']) 

In [2]: pd.to_datetime(dates) # doesn't even convert first date 
Out[2]: 
0 1/1/2014 
1   A 
dtype: object 

In [3]: pd.to_datetime(dates, errors='raise') 
... 
ValueError: Given date string not likely a datetime. 

注意:此參數在舊版熊貓版本中過去是coerce=True

In [4]: pd.to_datetime(dates, errors='coerce') 
Out[4]: 
0 2014-01-01 
1   NaT 
dtype: datetime64[ns] 

此行爲to_datetime is discussed in the timeseries section of the docs

可以看到哪些日期無法解析通過檢查isnull

In [5]: dates[pd.isnull(pd.to_datetime(dates, errors='coerce'))] 
Out[5]: 
1 A 
dtype: object 
1

Pandas.to_datetime功能靜靜地失敗,如果失敗,只是返回原來的價值。一個格式錯誤的輸入可能導致整個過程無聲無息地失敗。