如何在pandas中获取数据帧的多个列切片

时间:2017-05-20 07:14:04

标签: python pandas

例如,

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中的语法在这里不起作用,所以如何选择几个 数据框中的列?

2 个答案:

答案 0 :(得分:1)

您可以使用numpy.r_来连接索引,但它仅适用于排名,因此需要get_locsearchsorted + 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'

loc + join的另一种解决方案:

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