将日期添加到日期时间对象

时间:2020-02-13 15:36:16

标签: python pandas

我的数据集包含与销售相关的数据的多列。我在DataFrame中有ORDEREDDATESHIPPINGDAYS。我想在数据集中添加一个名为DELIVEREDDATE的新列。

当前数据框

ORDEREDDATE     SHIPPINGDAYS 
2018-5-13           6
2017-8-24           4
2018-6-1            2

预期输出

ORDEREDDATE     SHIPPINGDAYS   DELIVEREDDATE
2018-5-13           6              2018-5-19
2017-8-24           4              2017-8-28
2018-6-1            2              2018-6-3

类型

ORDEREDDATE          object
SHIPPINGDAYS         object

试图解决

df1['DELIVERYDATE'] = (datetime.datetime.strptime(df1['ORDEREDDATE'].astype(str), '%Y-%m-%d') + datetime.timedelta(df1['SHIPPINGDAYS'].astype(str).astype(int))

3 个答案:

答案 0 :(得分:2)

这是一种方法:

# make sure types are correct format
df['ORDEREDDATE'] = pd.to_datetime(df['ORDEREDDATE'])
df['SHIPPINGDAYS'] = df['SHIPPINGDAYS'].astype(int)

df['DELIVEREDDATE'] = (df
                      .apply(lambda x: x['ORDEREDDATE'] + pd.Timedelta(days= x['SHIPPINGDAYS']), 
                       axis=1)

  ORDEREDDATE  SHIPPINGDAYS DELIVEREDDATE
0  2018-05-13             6    2018-05-19
1  2017-08-24             4    2017-08-28
2  2018-06-01             2    2018-06-03

答案 1 :(得分:1)

首先,您需要将列转换为日期时间对象:

df1['ORDEREDDATE'] = pd.to_datetime(df1['ORDEREDDATE']

然后,您定义新列,同时还将int的{​​{1}}值转换为timedelta对象。这样,您可以对这些对象求和并返回所需的输出:

SHIPPINGDAYS

输出:

df['DELIVEREDDATE'] = df['ORDEREDDATE'] + df['SHIPPINGDAYS'].apply(lambda x: pd.Timedelta(x,unit='D'))

答案 2 :(得分:0)

因为您要添加秒而不是天!

您可以使用名称timedelta自变量初始化days。如果您不提供姓名,则以为单位。

此外,您以datetime对象结尾,因此需要在计算完成后以所需的方式对其进行格式化。

相关问题