从Pandas列中减去一个固定日期

5
考虑以下内容:
In [99]: d = pd.to_datetime({'year':[2016], 'month':[06], 'day':[01]})
In [100]: d1 = pd.to_datetime({'year':[2016], 'month':[01], 'day':[01]})

In [101]:d - d1
Out[101]: 
0   152 days
dtype: timedelta64[ns]

但是当我尝试将此操作应用于整个列时,就会遇到问题。例如:

df['Age'] = map(lambda x:x - pd.to_datetime({'year':[2016], 'month':[06], 'day':[01]}), df['Manager_DoB'])

df['Manager_Dob'] 是一个日期时间对象的列。 它提示了以下错误:

TypeError: 只能在日期时间和timedelta/DateOffset之间进行加减运算,但是传递了[__rsub__] 运算符。

1个回答

2

您不需要使用map*,可以从日期时间列/系列中减去一个时间戳:

In [11]: d = pd.to_datetime({'year':[2016], 'month':[6], 'day':[1]})

In [12]: d
Out[12]:
0   2016-06-01
dtype: datetime64[ns]

In [13]: d[0]  # This is the Timestamp you are actually interested in subtracting
Out[13]: Timestamp('2016-06-01 00:00:00')

In [14]: dates = pd.date_range(start="2016-01-01", periods=4)

In [15]: dates - d[0]
Out[15]: TimedeltaIndex(['-152 days', '-151 days', '-150 days', '-149 days'], dtype='timedelta64[ns]', freq=None)

你可以直接使用构造函数来获取时间戳:

In [21]: pd.Timestamp("2016-06-01")
Out[21]: Timestamp('2016-06-01 00:00:00')

*您永远不应该使用Python的map函数与pandas一起使用,建议使用.apply方法。


我最初使用了apply方法,但它给了我相同的错误。我也尝试了 dates - d,它给了我一行 NaT 值。但是添加 d[0] 就是解决方案。那样可行。我仍然不知道为什么它让我执行 dates - d - TheChetan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接