如何结合列表与范围选择Pandas DataFrame的指定列?
解决Pandas iloc索引时的ValueError问题
嗨,这个报错我之前也碰到过!问题出在你给iloc的列索引里混合了单个整数和数组——np.arange(5,8)返回的是一个数组array([5,6,7]),和[0,3]放在一起就变成了嵌套结构,iloc没法识别这种嵌套的序列,所以抛出了ValueError。
下面给你几种可行的解决办法:
方法1:把数组转成列表后合并
最直观的方式就是把np.arange的结果转成普通列表,再和前面的索引合并成一个扁平列表:
import pandas as pd import numpy as np df = pd.DataFrame({'a':[1,2], 'b':[1,2], 'c':[1,2], 'd':[1,2], 'e':[1,2], 'f':[1,2], 'g':[1,2], 'h':[1,2]}) # 合并索引列表 selected_cols = [0, 3] + list(np.arange(5, 8)) result = df.iloc[:, selected_cols] print(result)
执行后会得到你想要的结果:
a d e f g
0 1 1 1 1 1
1 2 2 2 2 2
方法2:用numpy拼接生成扁平数组
如果习惯用numpy操作,可以用np.concatenate把两个索引序列拼成一个扁平数组,iloc同样支持numpy数组作为索引:
selected_cols = np.concatenate([[0, 3], np.arange(5, 8)]) result = df.iloc[:, selected_cols]
方法3:直接手动写出所有索引(适合列数少的场景)
如果你的目标索引不多,直接把所有列索引列出来反而更清晰,完全不用借助np.arange:
result = df.iloc[:, [0, 3, 5, 6, 7]]
核心要点就是:给iloc传递的索引必须是扁平的序列(列表或numpy数组都可以),不能嵌套数组或列表结构哦!
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

