You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:07:28