1. ホーム
  2. python

[解決済み] オフセットロールフォワードと月オフセット追加後のパンダの境界外ナノ秒のタイムスタンプ

2022-01-28 04:36:13

質問

私は、pandasがこれらの行でdatetimeオブジェクトの境界外をどのように吹き飛ばしたかについて混乱しています。

import pandas as pd
BOMoffset = pd.tseries.offsets.MonthBegin()
# here some code sets the all_treatments dataframe and the newrowix, micolix, mocolix counters
all_treatments.iloc[newrowix,micolix] = BOMoffset.rollforward(all_treatments.iloc[i,micolix] + pd.tseries.offsets.DateOffset(months = x))
all_treatments.iloc[newrowix,mocolix] = BOMoffset.rollforward(all_treatments.iloc[newrowix,micolix]+ pd.tseries.offsets.DateOffset(months = 1))

ここで all_treatments.iloc[i,micolix] で設定された日付時間です。 pd.to_datetime(all_treatments['INDATUMA'], errors='coerce',format='%Y%m%d') であり、かつ INDATUMA は日付情報であり,形式は 20070125 .

このロジックはモックデータでは動作しているようなので(エラーもなく、日付も意味をなしている)、今のところ再現できませんが、私のデータ全体では以下のエラーで失敗しています。

pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2262-05-01 00:00:00

解決方法は?

pandasはナノ秒の分解能でタイムスタンプを表現するため、64ビット整数で表現できるタイムスパンは約584年に制限されます。

pd.Timestamp.min
Out[54]: Timestamp('1677-09-22 00:12:43.145225')

In [55]: pd.Timestamp.max
Out[55]: Timestamp('2262-04-11 23:47:16.854775807')

そして、あなたの値はこの範囲外である 2262-05-01 00:00:00 したがって、outofboundsエラー

ストレートアウト http://pandas-docs.github.io/pandas-docs-travis/user_guide/timeseries.html#timeseries-timestamp-limits

回避策

これにより、境界から外れた日付は強制的に NaT

pd.to_datetime(date_col_to_force, errors = 'coerce')