我有带字符串时间戳记的DataFrame列,我想将其转换为不带时区的本地日期时间。
df = {'id' : [1, 2, 3],
'timestamp' : ['2019-07-01T21:30:20Z', '2019-07-02T21:30:20Z', '2019-07-03T21:30:20Z']}
df = pd.DataFrame(df, columns = ['id','timestamp'])
我的代码:
df['timestamp'] = (pd.DatetimeIndex(pd.to_datetime(df['timestamp'], format="%Y-%m-%dT%H:%M:%SZ",
errors='ignore')).tz_localize('UTC').tz_convert('Europe/Prague'))
这在上面的示例中有效,但在下面的示例中无效。 OutOfBoundsDatetime:超出范围的纳秒级时间戳记
df = {'id' : [1, 2, 3],
'timestamp' : ['2019-07-01T21:30:20Z', '2999-12-31T21:30:20Z', '9999-12-30T21:30:20Z']}
2999-12-31T21:30:20Z或9999-12-30T21:30:20Z有问题。我该怎么解决?
答案 0 :(得分:0)
因此,熊猫可以容纳的最大时间戳为'2262-04-11 23:47:16.854775807'
(请参见https://pandas-docs.github.io/pandas-docs-travis/user_guide/timeseries.html#timestamp-limitations)。因此,第二个和第三个时间戳都是问题。
至于解决方法,如果您需要这些日期,我不确定是否可以帮助您。但是,您可以通过更改errors参数来删除它们。
我还摆脱了您调用的某些函数,因为它们不需要在那里。
df = pd.DataFrame({'id' : [1, 2, 3],
'timestamp' : ['2019-07-01T21:30:20Z',
'2999-12-31T21:30:20Z',
'9999-12-30T21:30:20Z']})
df['timestamp'] = pd.to_datetime(df['timestamp'],
format="%Y-%m-%dT%H:%M:%SZ", errors='coerce', utc=True)
df['timestamp'] = df['timestamp'].dt.tz_convert('Europe/Prague')
df.dropna()
,如果您需要删除NaT
值