日期之间的Python差异np数组-当前日期

时间:2018-11-20 17:26:24

标签: python pandas numpy datetime

我正在尝试查找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

任何帮助都会很棒。谢谢!

3 个答案:

答案 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 Datedatetime系列,那么我对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)