Python TypeError报错:列表索引应为整数/切片而非字符串
问题:计算DataFrame中kh列总和时触发TypeError错误
问题重现
原始代码
# 从csv读取top和bottom字段,生成区间数据 def get_interval(row): return df[(df['DEPTH']>=row['top']) & (df['DEPTH']<=row['bottom'])] # 合并所有区间 intervals = list(perf.apply(get_interval, axis=1)) pd.concat(intervals) # 计算数据框中kh列的总和 x = intervals['kh'].sum()
报错信息
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-22-d3a755411e27> in <module> 1 #Displaying and Summ the kh over the selected interval 2 ----> 3 x = intervals['kh'].sum() 4 5 #print('\033[93m' + '\033[4m'+ '\033[1m' + 'Total kh =' + '\033[0m', GHZL_13 ) TypeError: list indices must be integers or slices, not str
错误原因
intervals是列表类型,内部存储了多个小DataFrame,列表仅支持整数索引或切片访问元素,无法用字符串'kh'直接索引,这是触发TypeError的核心原因。- 执行
pd.concat(intervals)后未将合并结果赋值给变量,这行代码仅临时生成了合并后的DataFrame,但没有保存,后续仍在操作原始的列表intervals。
解决方案
将pd.concat(intervals)的合并结果保存为一个DataFrame变量,再对该变量的kh列执行求和操作。
修正后的代码
# 从csv读取top和bottom,生成对应区间的DataFrame def get_interval(row): return df[(df['DEPTH']>=row['top']) & (df['DEPTH']<=row['bottom'])] # 生成所有区间的DataFrame列表 intervals = list(perf.apply(get_interval, axis=1)) # 合并所有区间的DataFrame并保存到变量 combined_df = pd.concat(intervals) # 计算kh列的总和 x = combined_df['kh'].sum()
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

