我想将一个包含日期时间对象的列转换为一个整数列,该整数表示从该日期时间到今天的天数。我可以用一种丑陋的方法做到这一点,但我正在寻找一种更美观(而且更快)的方法。
假设我有一个带有日期时间列的数据框:
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>)
假设我想计算每个观察发生了多少天前,并将其作为一个简单的整数返回。我知道可以使用apply
两次,但是否有一种向量化/更清晰的方式来实现呢?
today = datetime.datetime.today().date()
df_dates = df['datetime'].apply(lambda x: x.date())
days_ago = today - df_dates
这将返回一个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
有什么想法吗?
相关问题没有完全回答我的问题:
Pandas Python-可以将日期时间与矢量化输入一起使用吗
尝试Karl D的答案,我成功地得到了今天的日期和所需的日期列,但在减法时出现了问题(与原始示例中的不同日期时间,但这应该没有关系,对吧?):
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]
converted_dates
是 datetime64[D] 类型,today_date
是 datetime64[us] 类型。有好的方法可以将today_date
转换吗? - exp1orernp.datetime64(dt.date.today().strftime('%Y-%m-%d'))
作为numpy 1.6的解决方法。 - Karl D.TypeError
错误吗?我不知道……我无法重现它。但我添加了一个可能的解决方法,能行吗? - Karl D.