在熊猫中添加日期

Posted

技术标签:

【中文标题】在熊猫中添加日期【英文标题】:Add days to date in pandas 【发布时间】:2017-08-03 18:21:58 【问题描述】:

我有一个包含 2 列的数据框,一列是日期,另一列是浮点数。 我想添加这两个以获得以下内容:

   Index           Date           Days           NewDate
     0           20-04-2016        5           25-04-2016
     1           16-03-2015       3.7          20-03-2015

如您所见,如果有小数,则将其转换为 int 为 3.1--> 4(天)。 我有一些奇怪的问题,所以我很感激任何帮助。 谢谢!

【问题讨论】:

将天数转换为 timedelta 帧,然后在 Date 和 Days 之间进行操作。请参阅pandas.pydata.org/pandas-docs/stable/timedeltas.html 的操作文档,他们正好有这个示例案例。 【参考方案1】:

首先,确保Date 列是一个日期时间对象:

df['Date'] = pd.to_datetime(df['Date'])

然后,我们可以通过上限将Days 列转换为 int 并将其转换为 pandas Timedelta:

temp = df['Days'].apply(np.ceil).apply(lambda x: pd.Timedelta(x, unit='D'))

可以添加日期时间对象和时间增量:

df['NewDate'] = df['Date'] + temp

【讨论】:

如何将Days 添加到今天的日期 并创建NewDate 请打开一个新问题。这与原始问题没有直接关系。 我发了一个新的question【参考方案2】:

您可以将 Days 列转换为 timedelta 并将其添加到 Date 列:

import pandas as pd

df['NewDate'] = pd.to_datetime(df.Date) + pd.to_timedelta(pd.np.ceil(df.Days), unit="D")
df

【讨论】:

如何通过将Days 添加到今天的日期来创建NewDate?即df['NewDate'] = ??date_of_today?? + pd.to_timedelta(pd.np.ceil(df.Days), unit="D") 无法添加 DatetimeIndex 和 DatetimeIndex 最好的,现在,直接使用 numpy 而不是 pandas pd.np.ceil(df.Days) --> np.ceil(df.Days)【参考方案3】:

使用combine 进行两列计算,使用pd.DateOffset 添加days

df['NewDate'] = df['Date'].combine(df['Days'], lambda x,y: x + pd.DateOffset(days=int(np.ceil(y))))

输出:

        Date  Days    NewDate
0 2016-04-20   5.0 2016-04-25
1 2016-03-16   3.7 2016-03-20

【讨论】:

以上是关于在熊猫中添加日期的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫中传播范围日期

更改熊猫中日期时间列的时区并添加为分层索引

查找熊猫中两个日期之间差异的最简单方法

使用熊猫添加数据中的问题

在多个日期窗口上应用熊猫滚动的更快方法

熊猫:自某个日期以来经过的天数