无法将日期转换为datetime64

18

以下代码:

import pandas as pd
import numpy as np

data = pd.DataFrame({'date': ('13/02/2012', '14/02/2012')})
data['date'] = data['date'].astype('datetime64')

在一个机器上(windows)能正常工作,但在另一台机器上(linux)不能正常工作。两台机器都安装了numpy和pandas。

我得到的错误信息是:

ValueError: Cannot create a NumPy datetime other than NaT with generic units

这个错误是什么意思?我第一次看到它,网上找不到太多相关信息。它是某个依赖项缺失吗?


这两台机器上的numpy版本是否相同?(print np.__version__)。如果我没记错,datetime64是一个相当新的添加。 - mgilson
在能够运行的机器上使用1.6.2版本,在另一台机器上使用1.7.0版本。 - sashkello
1个回答

27

不要这样做。Pandas 在内部将日期时间保留为 datetime64[ns]。像这样的转换非常容易出错(因为各个 numpy 版本中存在问题,尤其是 1.6.2 版本)。请使用 pandas 程序,然后像操作实际的 datetime 对象一样操作它们。你想做什么?

In [30]: pandas.to_datetime(data['date'])
Out[30]: 
0   2012-02-13 00:00:00
1   2012-02-14 00:00:00
Name: date, dtype: datetime64[ns]

完美地工作了!谢谢!我只有一个包含日期字符串的文件,所以将它们转换为可以操作的对象... 干杯 :) - sashkello
哈...还可以尝试在read_csv中传递parse_dates=True(文档中有更多选项) - Jeff
是的,我避免了那个问题,因为有一些类似日期的字符串我不想转换。 - sashkello
有意义的建议是创建两列,然后将日期相似的移动到另一列,并在原位置填充“NaT”(可以使用“s[indexes_of_moved_columns] = np.nan”实现,当列为“datetime64[ns]”时会转换为“NaT”),这是我的建议。 - Jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接