gpt4 book ai didi

python - 使用日期的 Pandas 数据框中的列算法

转载 作者:太空狗 更新时间:2023-10-29 22:26:13 25 4
gpt4 key购买 nike

我认为这应该很容易,但我有点碰壁。我有一个从 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 和开始日期之间的天数差异(而不是“us”或“ns”!!!),比如 2006-01-01。我尝试了以下方法:

>>> 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')

这很好。

我是不是漏掉了什么直截了当的东西?

在此先感谢您的帮助。

最佳答案

不确定为什么 numpy datetime64 与 pandas dtypes 不兼容,但使用 datetime 对象对我来说效果很好:

In [39]:

import datetime as dt
mydata['new'] = mydata['event_date'] - dt.datetime(2006,1,1)
mydata
Out[39]:
cat event_date total new
Index
0 G2 2006-03-08 16 66 days
1 G2 NaT NaN NaT
2 G2 NaT NaN NaT
3 G3 2006-03-10 16 68 days
4 G3 2006-08-04 12 215 days
5 G3 2006-12-28 13 361 days
6 G3 2007-05-25 10 509 days
7 G4 2006-03-10 13 68 days
8 G4 2006-08-06 19 217 days
9 G4 2006-12-30 16 363 days

关于python - 使用日期的 Pandas 数据框中的列算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com