组合数据帧切片时,concat和np_r之间的结果不同

时间:2018-07-18 21:15:39

标签: python pandas dataframe slice

我们假设以下是一个数据框

import pandas as pd
import numpy as np  
df = pd.DataFrame({'group1' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'group2' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'group3' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'group4' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'group5' : ['C', 'C', 'C', 'C',
                         'C', 'E', 'E', 'E'],
                   'group6' : ['C', 'C', 'C', 'C',
                         'C', 'E', 'E', 'E'],
                   'group7' : ['A', 'A', 'A', 'A',
                         'A', 'A', 'A', 'A'],
                   'time' : [-6,-5,-4,-3,-2,-6,-3,-4] , 
                   'col': [1,2,3,4,5,6,7,8]})

现在,我只希望从数据框中选择某些切片,而我应用的第一种方法是concat:

a=df.iloc[:,0:2]
b=df.iloc[:,6:8]
df1=pd.concat([a,b],sort=False)
df1

我从这段代码中得到的输出如下

  group1 group2 group7  time
0      A      A    NaN   NaN
1      A      A    NaN   NaN
2      A      A    NaN   NaN
3      A      A    NaN   NaN
4      A      A    NaN   NaN
5      A      A    NaN   NaN
6      A      A    NaN   NaN
7      A      A    NaN   NaN
0    NaN    NaN      A  -6.0
1    NaN    NaN      A  -5.0
2    NaN    NaN      A  -4.0
3    NaN    NaN      A  -3.0
4    NaN    NaN      A  -2.0
5    NaN    NaN      A  -6.0
6    NaN    NaN      A  -3.0
7    NaN    NaN      A  -4.0

这似乎是一个奇怪的结果。但是如果我尝试使用np_r

df.iloc[:5, np.r_[0:2,6:8]]

输出是正确的...

  group1 group2 group7  time
0      A      A      A    -6
1      A      A      A    -5
2      A      A      A    -4
3      A      A      A    -3
4      A      A      A    -2
5      A      A      A    -6
6      A      A      A    -3
7      A      A      A    -4

使用concat修复输出是否更有效,np_r是组合数据帧切片的最佳方法吗?如果是,为什么?

1 个答案:

答案 0 :(得分:1)

使用axis=1

a=df.iloc[:,0:2]
b=df.iloc[:,6:8]
df1=pd.concat([a,b],sort=False, axis=1)

    group1  group2  group7  time
0   A       A       A       -6
1   A       A       A       -5
2   A       A       A       -4
3   A       A       A       -3
4   A       A       A       -2
5   A       A       A       -6
6   A       A       A       -3
7   A       A       A       -4