如何在Pandas中参数化列索引?实现全列或排除最后一列的动态选择
你写的这段代码不可行,因为df.iloc接受的是整数位置索引、slice对象或者布尔数组,而不是字符串形式的索引表达式。直接传:−1或者:会报错,因为这些字符串无法被解析成有效的索引。
下面是几种可行的参数化实现方式:
方法一:使用slice对象
根据exclude_last的值生成对应的slice对象,这是最贴近你原有写法的方案:
if exclude_last: col_slice = slice(None, -1) # 等价于 iloc[:, :-1] else: col_slice = slice(None) # 等价于 iloc[:, :] df.iloc[:, col_slice].apply(foobar)
slice(None)代表选取所有元素,slice(None, -1)代表从开头到倒数第二个元素(排除最后一列)。
方法二:通过列名列表选择
如果你的DataFrame有明确的列名,也可以直接用列名列表来控制,可读性更强:
cols = df.columns[:-1] if exclude_last else df.columns df[cols].apply(foobar)
方法三:一行式条件表达式
想让代码更紧凑的话,可以把判断逻辑直接写在iloc的参数里:
df.iloc[:, :-1 if exclude_last else :].apply(foobar)
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

