在pandas数据框架中使用日期进行列运算[英] Column arithmetic in pandas dataframe using dates

本文是小编为大家收集整理的关于在pandas数据框架中使用日期进行列运算的处理方法,想解了在pandas数据框架中使用日期进行列运算的问题怎么解决?在pandas数据框架中使用日期进行列运算问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我认为这应该很容易,但是我撞了一点墙.我有一个数据集,该数据集已从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

我要做的就是创建一个新列,该列在事件_date和开始日期之间(例如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')

正常工作.

我在这里很简单地错过了什么吗?

事先感谢您的任何帮助.

推荐答案

不确定为什么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

其他推荐答案

确保您拥有pandas和numpy的最新日期版本(> = 1.7):

In [11]: df.event_date - pd.Timestamp('2006-01-01')
Out[11]:
0    66 days
1        NaT
2        NaT
3    68 days
4   215 days
5   361 days
6   509 days
7    68 days
8   217 days
9   363 days
Name: event_date, dtype: timedelta64[ns]

本文地址:https://www.itbaoku.cn/post/1727939.html