2

我有一个熊猫数据框,它有 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"]
4

2 回答 2

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
于 2016-11-18T12:43:40.693 回答
1

只是使用名称的额外建议:
df=df.loc[:, ['a','c']].join(df.loc[:, 'h':'z'])

于 2016-11-18T13:54:20.670 回答