例如,
from pandas import DataFrame
df = DataFrame(np.arange(8).reshape(1, 8), columns = list('abcdefgh'))
我想选择列'b':'d'和'f':'h',包括两者。
我知道我可以通过执行:
来选择'b':'d' df2 = df.loc[:, 'b':'d']
,但df2 = df.loc[:, ['b':'d', 'f':'h']]
之类的内容
这就像MATLAB中的语法在这里不起作用,所以如何选择几个
数据框中的列?
答案 0 :(得分:1)
您可以使用numpy.r_
来连接索引,但它仅适用于排名,因此需要get_loc
或searchsorted
+ iloc
:
df = pd.DataFrame(np.arange(8).reshape(1, 8), columns = list('abcdefgh'))
print (df)
a b c d e f g h
0 0 1 2 3 4 5 6 7
b = df.columns.get_loc('b')
d = df.columns.get_loc('d')
f = df.columns.get_loc('f')
h = df.columns.get_loc('h')
print (b,d,f,h)
1 3 5 7
b = df.columns.searchsorted('b')
d = df.columns.searchsorted('d')
f = df.columns.searchsorted('f')
h = df.columns.searchsorted('h')
print (b,d,f,h)
1 3 5 7
df = df.iloc[:, np.r_[b:c+1, f:h+1]]
print (df)
b c d f g h
0 1 2 3 5 6 7
与:
相同df = df.iloc[:, np.r_[1:4, 5:8]]
print (df)
b c d f g h
0 1 2 3 5 6 7
df = df.iloc[:, np.r_['b':'d', 'f':'h']]
print (df)
#TypeError: unsupported operand type(s) for -: 'str' and 'str'
df = df.loc[:,'b':'d'].join(df.loc[:,'f':'h'])
print (df)
b c d f g h
0 1 2 3 5 6 7
答案 1 :(得分:0)
使用pd.concat执行此操作的另一种方法:
pd.concat([df.loc[:,'b':'d'],df.loc[:,'f':'h']],1)
Out[608]:
b c d f g h
0 1 2 3 5 6 7