Python 熊猫中datetime列的矢量化操作

Python 熊猫中datetime列的矢量化操作,python,pandas,Python,Pandas,我想获取一列datetime对象并返回一列整数,这些整数是“从该datetime到今天的天数”。我可以用一种丑陋的方式,寻找一种更漂亮(更快)的方式 假设我有一个dataframe,其中有一个datetime列,如下所示: 11 2014-03-04 17:16:26+00:00 12 2014-03-10 01:35:56+00:00 13 2014-03-15 02:35:51+00:00 14 2014-03-20 05:55:47+00:00 15 2014

我想获取一列datetime对象并返回一列整数,这些整数是“从该datetime到今天的天数”。我可以用一种丑陋的方式,寻找一种更漂亮(更快)的方式

假设我有一个dataframe,其中有一个datetime列,如下所示:

11    2014-03-04 17:16:26+00:00
12    2014-03-10 01:35:56+00:00
13    2014-03-15 02:35:51+00:00
14    2014-03-20 05:55:47+00:00
15    2014-03-26 04:56:33+00:00
Name: datetime, dtype: object
每个元素看起来像:

datetime.datetime(2014, 3, 4, 17, 16, 26, tzinfo=<UTC>)
它给出了一个timedelta64[ns]系列

11   56 days, 00:00:00
12   50 days, 00:00:00
13   45 days, 00:00:00
14   40 days, 00:00:00
15   34 days, 00:00:00
Name: datetime, dtype: timedelta64[ns]
最后,如果我希望它是一个整数:

days_ago_as_int = days_ago.apply(lambda x: x.item().days)
days_ago_as_int
11    56
12    50
13    45
14    40
15    34
Name: datetime, dtype: int64
有什么想法吗


相关问题没有完全理解我的问题:


通过尝试,我成功地获得了今天的日期和所需的日期列,但减法中出现了一些错误(与原始示例中的日期时间不同,但不重要,对吧?)

(对于名为date的列)如何

将日期时间导入为dt
df['foo']=(np.datetime64(dt.date.today())
-df['date'].values.astype('datetime64[D]'))
打印df
枣福
0 2014-03-04 17:16:26 56天
1 2014-03-10 01:35:56 50天
2 2014-03-15 02:35:51 45天
3 2014-03-20 05:55:47 40天
4 2014-03-2604:56:33 34天
或者,如果您希望将其作为int:

df['foo']=(np.datetime64(dt.date.today())
-df['date'].values.astype('datetime64[D]')).astype(int)
打印df
枣福
0 2014-03-04 17:16:26   56
1 2014-03-10 01:35:56   50
2 2014-03-15 02:35:51   45
3 2014-03-20 05:55:47   40
4 2014-03-26 04:56:33   34
或者如果它是一个索引

print np.datetime64(dt.date.today())-df.index.values.astype('datetime64[D]”)
[56 50 45 40 34]
过了很久编辑:这是一个解决方案,怎么样

>>打印df
日期
0 2014-03-04 17:16:26
1 2014-03-10 01:35:56
2 2014-03-15 02:35:51
3 2014-03-20 05:55:47
4 2014-03-26 04:56:33
尝试将今天的日期指定给列,以便pandas将其转换为datetime64列,然后执行以下算术:

>>> df['today'] = dt.date.today()
>>> df['foo'] = (df['today'].values.astype('datetime64[D]')
               - df['date'].values.astype('datetime64[D]'))
>>> print df

                 date       today     foo
0 2014-03-04 17:16:26  2014-05-14 71 days
1 2014-03-10 01:35:56  2014-05-14 65 days
2 2014-03-15 02:35:51  2014-05-14 60 days
3 2014-03-20 05:55:47  2014-05-14 55 days
4 2014-03-26 04:56:33  2014-05-14 49 days

谢谢你的回答!但实际上这对我来说并不太有效——我在问题中添加了我尝试遵循你的代码的内容。你能检查一下你的
转换日期
今天日期
的数据类型吗?啊,
转换日期
是datetime64[D],
今天日期
是datetime64[us]。有没有一种好方法可以转换今天的日期?这就是区别所在。当我这样做时,它创建了
datetime64[D]
。我会想:
today\u date=np.datetime64(dt.date.today(),'D')
.Hm,当我尝试得到
TypeError:function最多使用1个参数(给定2个)
。我正在使用NUMPY1.6.2,如果这很重要的话。
converted_dates = df['date'].values.astype('datetime64[D]')
today_date = np.datetime64(dt.date.today())
print converted_dates
print today_date
print today_date - converted_dates

[2014-01-16 00:00:00 
2014-01-19 00:00:00 
2014-01-22 00:00:00
2014-01-26 00:00:00
2014-01-29 00:00:00]

2014-04-30 00:00:00

[16189 days, 0:08:20.637994
16189 days, 0:08:20.637991
16189 days, 0:08:20.637988
16189 days, 0:08:20.637984
16189 days, 0:08:20.637981]
>>> df['today'] = dt.date.today()
>>> df['foo'] = (df['today'].values.astype('datetime64[D]')
               - df['date'].values.astype('datetime64[D]'))
>>> print df

                 date       today     foo
0 2014-03-04 17:16:26  2014-05-14 71 days
1 2014-03-10 01:35:56  2014-05-14 65 days
2 2014-03-15 02:35:51  2014-05-14 60 days
3 2014-03-20 05:55:47  2014-05-14 55 days
4 2014-03-26 04:56:33  2014-05-14 49 days