2016-08-23 16 views
4

MYインデックスはフォーマット'%m/%d/%Y' ('09/26/2007')変換は「%M /%D /%Y」文字列インデックス

と日時の文字列ですが、私はエラーを得ましたメッセージOutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

パンダが正しい文字列形式を検出できないようですが、インデックスをdatetimeインデックスに変換する方法はありますか?

おかげ

+0

'pd.to_datetime()'このフォーマットを検出することができるが。実際には、エラーを引き起こす1行のインデックスがありません。受け入れられた答えを確認してください。 – user5025141

答えて

4

エラーメッセージの外観は、あなたがあなたのインデックスに文字列'1/1/0001'を有することが表示されます。例えば、

df = pd.DataFrame([1,2], index=['09/26/2007', '1/1/0001']) 
pd.to_datetime(df.index) 

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00 

を上げるDatetimeIndex日付0001-01-01を表すことができないnumpyのdatetime64[ns]の配列を使用するため、このエラーが発生します。 datetime64[ns] dtypeは、dates in the range [1678 AD, 2262 AD]のみを表します。

この制限については、pandas github issueがあります。今のところ

、推奨される解決策は、代わりDatetimeIndexのPeriodIndex使用することである。

df = pd.DataFrame([1,2], index=['09/26/2007', '1/1/0001']) 
df.index = pd.PeriodIndex(df.index, freq='D') 

収率

  0 
2007-09-26 1 
1-01-01  2 
+0

私は 'df [df.index == '1/1/0001']'を試しました、それは空です。私はそれが存在してはならないので、その悪い日付をどのように見つけることができるかわかりません。 – user5025141

+0

'df ['dates'] = pd.to_datetime(df.index、errors = 'coerce')'を試してください。 (これは、無効な文字列を 'NaT'(not-a-time)オブジェクトに変換します。)' df.loc [pd.isnull(df ['dates'])] 'を見てください。 – unutbu

+0

ありがとう!私はその日付を見つけた、それは日付を逃す。その行の索引は空です。それを処理した後、 'pd.to_datetime()'は完璧に動作します。どうもありがとう! – user5025141

関連する問題