我正在尝试查找Pandas数据框中的日期列表与当前日期之间的天数。
我想创建一个新列,其中包含到期日和当前日期之间的天数。例如:
+---------------------+------------+
| Due Date | Difference |
+---------------------+------------+
| 2019-04-15 00:00:00 | 146 |
| 2019-02-11 00:00:00 | 83 |
| 2019-03-11 00:00:00 | 111 |
| 2019-01-04 00:00:00 | 45 |
| 2019-05-13 00:00:00 | 174 |
+---------------------+------------+
我正试图做:
current = np.datetime64('today')
df['Difference'] = df['Due Date'] - current
但是我弄错了数字。如果我像这样单独进行操作,效果很好:
df['Due Date'][0] - current
任何帮助都会很棒。谢谢!
答案 0 :(得分:2)
我认为您需要将它们转换为 datetime 以执行类似日期的操作。
df['Due Date'] = pd.to_datetime(df['Due Date'])
因此完整的代码如下:
df['Due Date'] = pd.to_datetime(df['Due Date'])
current = np.datetime64('today')
df['Difference'] = df['Due Date'] - current
编辑: 还有另一个可能的问题:我认为您需要将当前日期添加为一列(或熊猫系列),这样一个好的解决方法是:
current = np.datetime64('today')
df['current'] = np.datetime64('today')
df['Difference'] = df['Due Date'] - df['current']
答案 1 :(得分:1)
但是我打错了数字。
假设Due Date
是datetime
系列,那么我对Pandas 0.23 / NumPy 1.14.3的工作就很好了:
print(df['Due Date'] - np.datetime64('today'))
0 146 days
1 83 days
2 111 days
3 45 days
4 174 days
Name: Due Date, dtype: timedelta64[ns]
更多习惯用法是使用Pandas生成的对象,如果需要整数,则使用dt.days
:
print((df['Due Date'] - pd.Timestamp('today')).dt.days)
0 145
1 82
2 110
3 44
4 173
Name: Due Date, dtype: int64
请注意,例如,由于使用NumPy版本而导致的一日差异。真正的答案是两者之间 ,但是四舍五入可能不是人们所期望的。
答案 2 :(得分:0)
我将检查df["Due Date"]
的格式。如果日期格式与今天的日期不同,请进行切换。如果格式匹配,则广播(简单的减法)应该起作用。
否则,请尝试使用lambda函数应用更改:
df['Difference'] = df['Due Date'].apply(lambda x: x - current, axis=1)