【发布时间】:2014-08-12 02:29:53
【问题描述】:
我认为这应该很容易,但我有点碰壁了。我有一个从 Stata .dta 文件导入到 pandas 数据框中的数据集。有几列包含日期数据。数据框包含 100,000 多行,但给出了一个示例:
cat event_date total
0 G2 2006-03-08 16
1 G2 NaT NaN
2 G2 NaT NaN
3 G3 2006-03-10 16
4 G3 2006-08-04 12
5 G3 2006-12-28 13
6 G3 2007-05-25 10
7 G4 2006-03-10 13
8 G4 2006-08-06 19
9 G4 2006-12-30 16
数据以 datetime64 格式存储:
>>> mydata[['cat','event_date','total']].dtypes
cat object
event_date datetime64[ns]
total float64
dtype: object
我想要做的就是创建一个新列,它给出 event_date 和开始日期(例如 2006 年 1 月 1 日)之间的天数差异(而不是“我们”或“ns”!!!)。我尝试了以下方法:
>>> mydata['new'] = mydata['event_date'] - np.datetime64('2006-01-01')
……但我得到了消息:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
我也尝试过 lambda 函数,但也没有用。
但是,如果我只想在可以成功使用的每个日期上添加一天:
>>> mydata['plusone'] = mydata['event_date'] + np.timedelta64(1,'D')
效果很好。
我在这里遗漏了一些简单的东西吗?
提前感谢您的帮助。
【问题讨论】:
-
你的问题很奇怪,我无法解释,但以下对我有用:
import datetime as dt mydata['new'] = mydata['event_date'] - dt.datetime(2006,1,1)你能确认一下 -
我在任何情况下都尽量避免直接使用
np.datetime64,也就是说,这是一个错误:github.com/pydata/pandas/issues/7996
标签: python pandas dataframe datetime64