Pandas での修正方法: ナノ秒単位のタイムスタンプが範囲外です


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 OutOfBoundsDatetime : Out of bounds nanosecond timestamp: 2300-01-10 00:00:00

このエラーは、次の範囲外のタイムスタンプを作成しようとすると発生します。

 import pandas as pd

#display minimum timestamp allowed
print (pd. Timestamp . min )

1677-09-21 00:12:43.145224193

#display maximum timestamp allowed
print (pd. Timestamp . max )

2262-04-11 23:47:16.854775807

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次の 3 つの日付を含む日付範囲をパンダで作成しようとしているとします。

  • 2020 年 1 月 1 日
  • 2150/1/1
  • 2300/1/1

date_range()関数を使用して、この日付範囲の作成を試みることができます。

 import pandas as pd

#attempt to create date range
some_dates = pd. date_range (start=' 1/1/2000 ', end=' 1/1/2300 ', periods= 3 )

OutOfBoundsDatetime : Out of bounds nanosecond timestamp: 2300-01-10 00:00:00

タイムスタンプ 1/1/2300 が、パンダで許可されているナノ秒単位の最大タイムスタンプより大きいため、 OutOfBoundsDatetimeエラーが発生します。

ナノ秒を単位としてタイムスタンプを保存したくない場合でも、pandas は自動的に保存します。

エラーを修正する方法

このエラーを回避する最も簡単な方法は、 error = ‘coerce’引数を使用することです。これにより、最小範囲または最大範囲外のすべてのタイムスタンプが NaT 値に強制されます。

たとえば、次のコードを使用して日付範囲を作成し、許可された範囲外のすべてのタイムスタンプを自動的に NaT 値に強制できます。

 import pandas as pd

#create date range
some_dates = ['1/1/2000', '1/1/2150', '1/1/2300']

#convert date range to datetime and automatically coerce errors
some_dates = pd. to_datetime (some_dates, errors = ' coerce ')

#showdatetimes
print (some_dates)

DatetimeIndex(['2000-01-01', '2150-01-01', 'NaT'], dtype='datetime64[ns]', freq=None)

結果は 3 つの日時値を持つ日付範囲になり、最後の日時はパンダで許可されている最大値を超えたため NaT になります。

今回は日付範囲の作成時にエラーが発生しないことに注意してください。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

修正方法: 列が重なっていますが、サフィックスが指定されていません
修正方法: オブジェクト「numpy.ndarray」には「append」属性がありません
修正方法: すべてのスカラー値を使用する場合は、インデックスを渡す必要があります。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です