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
相关产品推荐
相关产品推荐

