gpt4 book ai didi

python - 如何计算不同 Pandas 列中两个日期之间的年数

转载 作者:太空狗 更新时间:2023-10-30 02:53:08 25 4
gpt4 key购买 nike

一列有日期,而另一列有一个包含日期的字符串,所以我首先需要从该字符串中提取日期部分。

import pandas as pd
import datetime
from dateutil.relativedelta import relativedelta

# the dataframe - id column always starts with year, month and day
df = pd.DataFrame({'id': ['19520630F8', '19680321A5', '19711113E2'],
'dte': ['2010-06-02', '2007-08-12', '2013-01-23']})

# create a date string from df['id'] to the format yyyy-mm-dd
dob = (df['id'].str[:4] + '-' +
df['id'].str[4:6] + '-' +
df['id'].str[6:8])

# calculate age (years only) at df['dte']
df['age'] = relativedelta(date, dob).years

我收到错误信息:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我不明白我的数据有歧义,以及在哪里应用那些空/ bool /项目...df['dta'] 列如果是对象数据类型而不是日期时间,但是将 dob 的创建包装在 pd.to_datetime 中不会有帮助。

编辑预期的输出应该是

          dte          id  age
0 2010-06-02 19520630F8 57
1 2007-08-12 19680321A5 39
2 2013-01-23 19711113E2 41

最佳答案

我认为需要:

df['age'] = (np.floor((pd.to_datetime(df['dte']) - 
pd.to_datetime(dob)).dt.days / 365.25)).astype(int)
print (df)
id dte age
0 19520630F8 2010-06-02 57
1 19680321A5 2007-08-12 39
2 19711113E2 2013-01-23 41

详细信息:

将列转换为日期时间并减去:

print (pd.to_datetime(df['dte']) -  pd.to_datetime(dob))
0 21156 days
1 14388 days
2 15047 days
dtype: timedelta64[ns]

转换为天,然后转换为年:

print ((pd.to_datetime(df['dte']) -  pd.to_datetime(dob)).dt.days / 365.25)
0 57.921971
1 39.392197
2 41.196441
dtype: float64

上次 floornumpy.floor. :

print ((np.floor((pd.to_datetime(df['dte']) - pd.to_datetime(dob)).dt.days / 365.25)))
0 57.0
1 39.0
2 41.0
dtype: float64

关于python - 如何计算不同 Pandas 列中两个日期之间的年数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com