Python 属性错误:';非类型';对象没有属性';年份';(在试图转换日期的列表中进行迭代时发生)

Python 属性错误:';非类型';对象没有属性';年份';(在试图转换日期的列表中进行迭代时发生),python,pandas,date,Python,Pandas,Date,我正试图将我的生日列表转换为年龄。日期是字符串 B日期清单:['1990-01-01','1991-01-01','1992-01-01'] 到 B日清单:[30、29、28] 使用python3,我要转换的代码是: for i in range(bday_list_length): pd.to_datetime('today').year - pd.to_datetime(bday_list[i]).year 但是,当我运行此命令时:会出现以下错误: 回溯(最近一次呼叫最后一次):

我正试图将我的生日列表转换为年龄。日期是字符串

B日期清单:['1990-01-01','1991-01-01','1992-01-01']

B日清单:[30、29、28]

使用python3,我要转换的代码是:

for i in range(bday_list_length):

    pd.to_datetime('today').year - pd.to_datetime(bday_list[i]).year
但是,当我运行此命令时:会出现以下错误:

回溯(最近一次呼叫最后一次): 文件“C:/Users/user/PycharmProjects/DBlytics/notebook/poc/ageData.py”,第60行,在 pd.to_datetime(“今天”).年-pd.to_datetime(bday_列表[i]).年 AttributeError:“非类型”对象没有属性“年”

但是,当我在循环外部运行以下命令时,它会转换

    pd.to_datetime('today').year - pd.to_datetime(bday_list[i]).year
我不确定我做错了什么

from datetime import datetime
bday_list = ['1990-01-01', '1991-01-01', '1992-01-01']
for date in bday_list:
     print(datetime.today().year - datetime.strptime(date,'%Y-%m-%d').year)

使用datetime,在使用数组中的strtime()将当前日期年转换为日期格式后,我提取当前日期年减去从bday_列表中的字符串中提取的年份,因此删除
[I]
仅适用于转换坏数据-解决方案将值转换为
NaT
,并添加
errors='concurve'

bday_list = ['1990-01-01', '1991-01-01', '1992-01-01', 'wrong']

print (pd.to_datetime(bday_list, errors='coerce'))
DatetimeIndex(['1990-01-01', '1991-01-01', '1992-01-01', 'NaT'], 
dtype='datetime64[ns]', freq=None)


我建议您使用普通python来解决上述任务。在浏览你的列表时,没有必要叫熊猫。此外,您还可以使用列表理解

from typing import List
import datetime as dt


bday_list: List[str] = ["1990-01-01", "1991-01-01", "1992-01-01"]
bday_list_dates = [dt.datetime.strptime(x, "%Y-%m-%d") for x in bday_list]
today = dt.date.today()
year_of_age = [today.year - x.year for x in bday_list_dates]
print(year_of_age)
导入日期时间
作为pd进口熊猫
日期列表=['1990-01-01','1991-01-01','1992-01-01']
日期列表=[日期列表中日期的pd.to\U日期时间(日期)]
年龄列表=[int(datetime.now().strftime('%Y'))-int(date.strftime('%Y'))表示日期列表中的日期]


这很容易!!,只需使用上面的代码。

尝试打印(repr(bday_list[i]),您最后看到的就是有问题的代码。例如,
pd.to_datetime(None).year
会引发相同的错误。谢谢!该错误与列表中的“null”项有关。谢谢你给我指明了正确的方向@Hungrypand121-然后使用
pd.to\u datetime(bday\u list,errors='concurve')
,检查我的答案。感谢您的回复。错误在我的数据中。当null值被迭代到pd.to_datetime(bday_list[i]).year时,它抛出了错误。您的代码也可以工作,而且更加灵活。
from typing import List
import datetime as dt


bday_list: List[str] = ["1990-01-01", "1991-01-01", "1992-01-01"]
bday_list_dates = [dt.datetime.strptime(x, "%Y-%m-%d") for x in bday_list]
today = dt.date.today()
year_of_age = [today.year - x.year for x in bday_list_dates]
print(year_of_age)