遍历列调用API时遇TypeError:float对象不可下标访问
TypeError: 'float' object is not subscriptable 排查方向
核心问题:变量名覆盖导致类型错误
你的代码存在变量重复赋值的致命问题:
- 循环语句
for (tornado, lon) in df.iterrows():中,lon原本是DataFrame的行对象(Series类型),支持通过下标访问列数据 - 但你随后执行
lon = lon['slon'],将lon重新赋值为该条数据的经度值(float类型) - 接下来执行
t = lon['time']时,试图对float类型变量使用下标访问,直接触发TypeError: 'float' object is not subscriptable
修复方法:修改经度变量名避免覆盖,比如改为lon_val:
for (tornado, row) in df.iterrows(): date = row['date'] lat = row['slat'] lon_val = row['slon'] t = row['time']
其他需修正的问题
- astype转换未生效:
Sample_df.slat.astype('float')仅做临时转换,未同步到原DataFrame,需改为:Sample_df['slat'] = Sample_df.slat.astype('float') Sample_df['slon'] = Sample_df.slon.astype('float') - URL变量引用错误:拼接URL时用了未定义的
time变量,实际你定义的是t,需修正:url = "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/{},{}/{}T{}?key={}".format(lat, lon_val, date, t, apikey) - 缺失requests导入:代码使用了
requests.get但未导入模块,需在开头添加:import requests
内容的提问来源于stack exchange,提问作者trog12
相关产品推荐
相关产品推荐

