2016-08-23 140 views
4

MY指数的日期时间字符串格式'%m/%d/%Y' ('09/26/2007')转换“%M /%d /%Y”串索引到大熊猫的日期时间指数

当我尝试使用pd.to_datetime功能pd.to_datetime(df.index)到指数转换成日期时间指数,我得到了错误消息OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

它看起来像大熊猫无法检测到正确的字符串格式,我怎么可以将索引转换为日期时间索引?

感谢

+0

的'pd.to_datetime()'可以检测到这种格式。其实我有一行缺少索引,这会导致错误。检查接受的答案。 – 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使用NumPy的datetime64[ns] S的不能代表日期0001-01-01的阵列。 dtype只能表示dates in the range [1678 AD, 2262 AD]

有一个pandas github issue讨论这个限制。

目前,推荐的解决方案是使用一个PeriodIndex代替DatetimeIndex的:

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'(非一次性)对象。)然后查看'df.loc [pd.isnull(df ['dates'])]''。 – unutbu

+0

谢谢!我发现那个日期,它错过了日期。该行的索引是空的。处理完它后,'pd.to_datetime()'完美无缺。非常感谢! – user5025141

相关问题