我认为这应该很容易,但我遇到了一些困难。我有一个数据集,从Stata .dta文件导入到pandas dataframe中。几列包含日期数据。dataframe包含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
我要做的就是创建一个新列,该列给出事件日期和开始日期(例如2006-01-01)之间的天数差异(而不是'us'或'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)
你能确认一下吗? - EdChum