在熊猫中添加日期
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
【讨论】:
以上是关于在熊猫中添加日期的主要内容,如果未能解决你的问题,请参考以下文章