Python处理日期字段报错:'str' object has no attribute 'Date'
解决Python日期处理中
'str' object has no attribute 'Date'的错误 我一眼就瞅出问题出在你的循环逻辑上啦!你写的for i in data:其实是在遍历DataFrame的列名,而不是每一行数据——列名都是字符串类型,自然没有Date属性,这就是报错的根源。
错误原因拆解
- 当直接遍历
data(一个Pandas DataFrame)时,默认迭代的是列的标签(也就是'Date'这类字符串列名),而不是每一行的Series对象。 - 所以循环里的变量
i本质是字符串,调用i.Date当然会抛出字符串没有Date属性的错误。
正确的实现方式
Pandas的核心优势是向量化操作,完全不需要手动行循环,给你两种高效的解决方案:
方法1:直接对整列操作(最推荐)
这是Pandas最地道的用法,效率拉满,代码还简洁:
from datetime import datetime import pandas as pd # 别忘了导入pandas!你的原代码漏了这行 data['Date'] = pd.to_datetime(data['Date']) # 直接从Date列批量提取年、月、日,生成新列 data['year'] = data['Date'].dt.year data['month'] = data['Date'].dt.month data['day'] = data['Date'].dt.day
方法2:如果一定要遍历行(不推荐,仅特殊场景用)
要是你因为某些特殊需求必须逐行处理,可以用data.iterrows()来获取每一行的对象:
from datetime import datetime import pandas as pd data['Date'] = pd.to_datetime(data['Date']) # 使用iterrows()拿到索引和每一行的Series for idx, row in data.iterrows(): data.loc[idx, 'year'] = row['Date'].year data.loc[idx, 'month'] = row['Date'].month data.loc[idx, 'day'] = row['Date'].day
额外小提示
- 务必确认已经导入
pandas库,原代码里缺失了import pandas as pd,这也是潜在的运行问题。 - 处理大数据集时,方法1的向量化操作比行循环快几十甚至上百倍,能不用循环就尽量不用哦。
内容的提问来源于stack exchange,提问作者Tisha Biswas
相关产品推荐
相关产品推荐

