python pandas datetime datetime不能正常工作

时间:2017-05-16 12:13:39

标签: python pandas datetime

我试图用很多方法来解决这个问题,但没有一个能够解决这个问题。

我想将pandas系列转换为datetime

我想我可能会错过一些小而重要的部分。

print test["order_date"][3]
print type(test["order_date"][3])

test["order_date"] = pd.to_datetime(test["order_date"], format="%Y-%m-%d %H:%M:%S")

##have also tried 
##test["order_date"] = pd.to_datetime(test["order_date"], infer_datetime_format=True) 
##test["order_date"] = test["order_date"].apply(pd.to_datetime)
##all turn out to be the same result

print test["order_date"][3]
print type(test["order_date"][3])

结果如下:

20150731000001
<type 'numpy.int64'>

1970-01-01 05:35:50.731000001 
<class 'pandas.tslib.Timestamp'>

我无法弄清楚result成为1970-01-01

的原因

如果需要任何进一步的信息,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:4)

您指定了错误的格式。

试试这个:

In [34]: pd.to_datetime(['20150731000001'], format="%Y%m%d%H%M%S")
Out[34]: DatetimeIndex(['2015-07-31 00:00:01'], dtype='datetime64[ns]', freq=None)

答案 1 :(得分:2)

这是因为dtype是int64所以它假设为纳秒单位值:

In[51]:
pd.to_datetime(20150731000001, unit='ns')
Out[51]: Timestamp('1970-01-01 05:35:50.731000001')

如果是字符串,则可以正确解析:

In[54]:
pd.to_datetime('20150731000001')
Out[53]: Timestamp('2015-07-31 00:00:01')

因此,您可以显式传递格式字符串(例如@ MaxU的答案)或将列的dtype转换为str然后传递:

test["order_date"] = pd.to_datetime(test["order_date"].astype(str))