代码之家  ›  专栏  ›  技术社区  ›  Nicola

合并数据帧切片时concat和np_r的结果不同[重复]

  •  0
  • Nicola  · 技术社区  · 6 年前

    这个问题已经有了答案:

    假设下面是一个数据帧

    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 回复  |  直到 6 年前
        1
  •  1
  •   rafaelc    6 年前

    使用 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