Pandas使用.iloc按列号读取列触发IndexError报错的解决方法
报错原因
你读取到的s是完整的逗号分隔字符串(示例值为"1,3,2"),直接放入列表后得到的是仅包含单个字符串元素的列表["1,3,2"],不符合iloc要求的整数型索引序列格式,因此触发类型报错。
解决方法
仅需要对读取到的字符串做「拆分→转整数」处理即可,修改后的代码如下:
import pandas as pd import numpy as np df = pd.read_csv('sample1.csv') with open('param.txt') as f: s = f.read() # 新增:将字符串处理为整数索引列表 col_index = [int(num.strip()) for num in s.strip().split(',')] # 注意:如果param.txt的列编号是从1开始计数,需要每个值减1,改成下面这行即可 # col_index = [int(num.strip())-1 for num in s.strip().split(',')] b = df.iloc[:, col_index] print(b.to_string(index=False))
处理逻辑说明
s.strip():去除读取内容首尾的换行、空格等多余空白字符,避免格式干扰split(','):按逗号将完整字符串切分为单个编号的字符串列表,如"1,3,2"会被切分为["1", "3", "2"]int(num.strip()):将每个字符串类型的编号转换为整数,同时处理编号之间可能存在的空格,适配param.txt可能存在的不规范格式(如1, 3, 2带空格的情况)
内容的提问来源于stack exchange,提问作者TMask
相关产品推荐
相关产品推荐

