2014-01-14 58 views
5

pandas to_datetime関数ではいくつかの問題がありますが、一般的にpandasではdatetimesです。具体的には、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([0:10])'のために働くのか? – waitingkuo

+0

これはnumpy 1.7とpandas 0.12で私にとってはうまくいくようです。 – joris

+0

numpy 1.7.1にアップグレードすることを検討してください – Jeff

答えて

4

これは新しいパンダで修正されました。デフォルトのエラーkwargは 'ignore'ではなく 'raise'です。
新しい動作はありません:ある

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. 

注:この引数は、旧式のpandasバージョンではcoerce=Trueでした。

この動作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機能は静かに失敗し、それが失敗した場合、単純に元の値を返します。 1つの不正な入力が原因で、プロセス全体が黙って失敗する可能性があります。

関連する問題