pandas “TimedeltaProperties”对象没有属性“strftime”

e0bqpujr  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(181)

每次我用这个来解决下面的问题,我得到:"TimedeltaProperties"对象没有属性"strftime"

df = pd.DataFrame({'Start_Date':pd.to_datetime(['2018-01-27','2018-08-31']),'End_Date':pd.to_datetime(['2019-03-13','2019-12-13'])})

| 开始日期|结束日期|
| - ------|- ------|
| 2018年1月27日上午00时00分|2019年12月13日上午00时00分|
| 2018年8月31日上午00时00分|2019年3月13日上午00时00分|

diff = df['End_Date'] - df['Start_Date']

我希望diff类似于:('% Y::% M::%D ')
我怎么能得到这样的结果???

vptzau2j

vptzau2j1#

您可以使用dateutil库来执行此操作:

pip install dateutil

它不是矢量化的,所以你必须在一个循环中完成,这比内置的panda函数要慢得多:

from dateutil.relativedelta import relativedelta

def get_duration(row):
    delta = relativedelta(row["End_Date"], row["Start_Date"])
    return f"{delta.years} years {delta.months} months {delta.days} days"

df.apply(get_duration, axis=1)
dgtucam1

dgtucam12#

例如,使用dateutil中的库relativedelta时,格式可能会有所不同

import pandas as pd
from dateutil.relativedelta import relativedelta

df = pd.DataFrame({'Start_Date':pd.to_datetime(['2018-01-27','2018-08-31']),'End_Date':pd.to_datetime(['2019-03-13','2019-12-13'])})
cols = ['End_Date', 'Start_Date']
df['relativedelta'] = df[cols].apply(lambda x: relativedelta(x[0], x[1]), axis=1)
print(df)

输出:

Start_Date   End_Date                                 relativedelta
0 2018-01-27 2019-03-13  relativedelta(years=+1, months=+1, days=+14)
1 2018-08-31 2019-12-13  relativedelta(years=+1, months=+3, days=+13)

并将其设置为所需格式('% Y::% M::% D'),您可以

df['diff'] = df['relativedelta'].apply(lambda x: f'{x.years} :: {x.months} :: {x.days}')
print(df)

产出

Start_Date   End_Date                                 relativedelta           diff 
0 2018-01-27 2019-03-13  relativedelta(years=+1, months=+1, days=+14)   1 :: 1 :: 14 
1 2018-08-31 2019-12-13  relativedelta(years=+1, months=+3, days=+13)   1 :: 3 :: 13

相关问题