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

Python使用for in循环执行代码时报'int' object is not subscriptable错误

报错原因

'int' object is not subscriptable报错的核心原因是:你尝试对整数类型的变量使用[]下标访问操作,仅字符串、列表、字典、DataFrame等支持下标操作的类型可使用该语法。

结合你提供的代码,具体问题出在循环内的df_i变量:
你遍历的digits列表元素是2006、2007两个整数,Python不会自动把循环变量i的值拼接到df_i变量名中,无法自动识别为你提前定义的df_2006、df_2007变量。如果df_i没有被提前赋值为DataFrame,或是被意外赋值为整数,你调用df_i['year']这类下标操作就会触发该报错。

另外你的代码还存在一个隐藏问题:你拼接的dateInt是无分隔符的纯数字字符串,pd.to_datetime的format参数写为%Y/%m/%d会导致时间解析失败,需要修改为%Y%m%d。

排查步骤
  • 在循环第一行添加代码print(type(df_i)),如果运行后输出为<class 'int'>,即可确认是df_i变量类型不符合预期导致的报错。
  • 确认你已经提前创建了对应年份的DataFrame,df_2006、df_2007变量名拼写无误。
解决方法

推荐将所有年份的DataFrame存入字典,按年份动态取值,是兼容性最高的写法,修改后的代码如下:

import pandas as pd

# 提前将对应年份的DataFrame存入字典
df_dict = {
    2006: df_2006,
    2007: df_2007
}
digits = [2006 , 2007]
# 用列表存储每次循环生成的结果
dff_list = []

for i in digits:
    # 按年份取出对应DataFrame
    df_i = df_dict[i]
    df_i['dateInt']=df_i['year'].astype(str) + df_i['month'].astype(str).str.zfill(2)+ df_i['day'].astype(str).str.zfill(2)
    # 修正format格式
    df_i['Date'] = pd.to_datetime(df_i['dateInt'], format='%Y%m%d')
    df_i['date'] = df_i['Date'].dt.strftime('%m/%d/%Y')
    dff_i = pd.DataFrame({'date' :df_i['date'] , 'Summary' :df_i['Summary'],'Precip Type':df_i['Precip Type'], 'Temperature (C)':df_i['Temperature (C)'], 'Wind Speed (km/h)':df_i['Wind Speed (km/h)'],'Pressure (millibars)': df_i['Pressure (millibars)'], 'Humidity':df_i['Humidity']})
    dff_list.append(dff_i)

# 合并所有年份的结果后打印,也可按需单独打印每年的dff_i
final_dff = pd.concat(dff_list, ignore_index=True)
print(final_dff)

内容的提问来源于stack exchange,提问作者Amirreza Mirzajani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03