我有一个包含 50 列的 pandas 数据框,我想选择 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"]
您可以使用 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
我是一名优秀的程序员,十分优秀!