我有一个pandas数据框,有50列,我想选择30列。 假设我们有以下数据框:
df = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",............, "z"]
我想选择“a”和“c”,然后选择“h”到“z”的所有列
请告知如何按名称或索引对此数据框进行子集化。
我希望结果数据框如下所示:
df = ["a", "c", "h", "i", "j", "k", "l",............, "z"]
答案 0 :(得分:1)
您可以使用numpy.r_
来确定列的位置,然后使用iloc
进行选择:
print (df.iloc[:, np.r_[0,2,7: len(df.columns)]])
样品:
df = pd.DataFrame({'a':[1,2,3],
'b':[4,5,6],
'c':[7,8,9],
'd':[1,3,5],
'e':[5,3,6],
'f':[7,8,9],
'g':[1,3,5],
'h':[5,3,6],
'i':[7,8,9],
'j':[1,3,5],
'k':[5,3,6],
'l':[7,4,3],
'm':[7,4,3]})
print (df)
a b c d e f g h i j k l m
0 1 4 7 1 5 7 1 5 7 1 5 7 7
1 2 5 8 3 3 8 3 3 8 3 3 4 4
2 3 6 9 5 6 9 5 6 9 5 6 3 3
print (np.r_[0,2,7: len(df.columns)])
[ 0 2 7 8 9 10 11 12]
print (df.iloc[:, np.r_[0,2,7: len(df.columns)]])
a c h i j k l m
0 1 7 5 7 1 5 7 7
1 2 8 3 8 3 3 4 4
2 3 9 6 9 5 6 3 3
另一种解决方案是exclude list
使用difference
:
exclude = ['b','d','e','f','g']
cols = df.columns.difference(exclude)
print (cols)
Index(['a', 'c', 'h', 'i', 'j', 'k', 'l', 'm'], dtype='object')
print (df[cols])
a c h i j k l m
0 1 7 5 7 1 5 7 7
1 2 8 3 8 3 3 4 4
2 3 9 6 9 5 6 3 3
或drop
列:
exclude = ['b','d','e','f','g']
print (df.drop(exclude, axis=1))
a c h i j k l m
0 1 7 5 7 1 5 7 7
1 2 8 3 8 3 3 4 4
2 3 9 6 9 5 6 3 3
答案 1 :(得分:1)
使用名称的额外建议:
df=df.loc[:, ['a','c']].join(df.loc[:, 'h':'z'])