正如标题所述,我正在尝试选择DataFrame.set_index
中除一列以外的所有列。
我尝试了以下方法:
df = df.set_index(list(df.columns != 'cus_name'))
cus_name
系列是我要排除的系列。上面的代码引发KeyError: True
。
list(df.columns != 'cus_name')
是布尔值[True, True, False, True, True, True, True, True, True, True, True, True]
的列表,而我需要的是cus_name
以外的列名称的列表。
我知道我可以在set_index
方法中显式输入我想要的列的完整列表,但是我在徘徊是否有更有效的方法来做到这一点。
答案 0 :(得分:4)
如果顺序很重要,您可以在此处将sort=False
与pd.Index.difference()
一起使用:
df=df.set_index(df.columns.difference(['cus_name'],sort=False).tolist())
答案 1 :(得分:3)
通过设置操作实现此目的的一种轻松方式:
df.set_index(list(set(df.columns) - {'cus_name'}))
答案 2 :(得分:2)
尝试列表理解
df = df.set_index([c for c in df.columns if c != 'cus_name'])
答案 3 :(得分:1)
或者,
df = df.set_index(df.columns.drop('cus_name').tolist()))