将2个数据帧与索引作为字符串列表连接在一起时出错

问题描述 投票:1回答:1

我需要连接两个索引为字符串的数据帧。但是,我遇到以下错误:

TypeError: Cannot concatenate list of ['DataFrame', 'DataFrame']

我做了一些研究,但是没有找到关于此错误的解释。

这里是正在发生的事的示例:

数据框1:

    a=pd.DataFrame({'a1':[1,2,3],'a2':[3,4,5],'i':[7,10,11]})

数据框2:

    b=pd.DataFrame({'b1':[5,6],'b2':[7,8],'i':[7,11]})

如果我将索引重置为'i'列,即整数列表,则可以达到预期的结果,如下所示:

代码:

    import pandas as pd

    a=pd.DataFrame({'a1':[1,2,3],'a2':[3,4,5],'i':[7,10,11]})

    b=pd.DataFrame({'b1':[5,6],'b2':[7,8],'i':[7,11]})

    print('\na:\n',a,'\n\nb:\n',b)

    new_a = a.set_index('i', drop=True)

    new_b=b.set_index('i', drop=True)

    print('\nnew_a:\n',new_a,'\n\nnew_b:\n',new_b)

    c = pd.concat([new_a,new_b],axis=1)

    print('\n\nc:\n',c,'\n')

输出:

    a:
        a1  a2   i
    0   1   3   7
    1   2   4  10
    2   3   5  11 

    b:
        b1  b2   i
    0   5   7   7
    1   6   8  11

    new_a:
         a1  a2
    i         
    7    1   3
    10   2   4
    11   3   5 

    new_b:
         b1  b2
    i         
    7    5   7
    11   6   8 

    c:
         a1  a2   b1   b2
    i                   
    7    1   3  5.0  7.0
    10   2   4  NaN  NaN
    11   3   5  6.0  8.0 

但是,如果我将索引重置为'i'列,即字符串列表,则会出现错误,如下所示:

代码:

    import pandas as pd

    a=pd.DataFrame({'a1':[1,2,3],'a2':[3,4,5],'i':['i7','i10','i11']})

    b=pd.DataFrame({'b1':[5,6],'b2':[7,8],'i':['i7','i11']})

    print('\na:\n',a,'\n\nb:\n',b)

    new_a = a.set_index('i', drop=True)

    new_b=b.set_index('i', drop=True)

    print('\nnew_a:\n',new_a,'\n\nnew_b:\n',new_b)

    c = pd.concat([new_a,new_b],axis=1)

    print('\n\nc:\n',c,'\n')

输出:

    a:
        a1  a2    i
    0   1   3   i7
    1   2   4  i10
    2   3   5  i11 

    b:
        b1  b2    i
    0   5   7   i7
    1   6   8  i11

    new_a:
          a1  a2
    i          
    i7    1   3
    i10   2   4
    i11   3   5 

    new_b:
          b1  b2
    i          
    i7    5   7
    i11   6   8

    Traceback (most recent call last):

      File "<ipython-input-266-6b35fe042e4a>", line 13, in <module>
        c = pd.concat([new_a,new_b],axis=1)

      File "C:\mypath\concat.py", line 225, in concat
        copy=copy, sort=sort)

      File "C:\Users\mypath\concat.py", line 378, in __init__
        self.new_axes = self._get_new_axes()

      File "C:\Users\mypath\concat.py", line 445, in _get_new_axes
        new_axes[i] = self._get_comb_axis(i)

      File "C:\Users\mypath\concat.py", line 470, in _get_comb_axis
        .format(types=types))

    TypeError: Cannot concatenate list of ['DataFrame', 'DataFrame']

[如果有人可以帮助我确定问题所在,我将不胜感激。

谢谢。

python pandas python-3.6 concat
1个回答
1
投票

[将pd.concatpd.concat一起使用:

sort=False

如果先前的选项不起作用,请使用:c = pd.concat([new_a,new_b],axis=1,sort=False)

DataFrame.merge

输出:

DataFrame.merge
© www.soinside.com 2019 - 2024. All rights reserved.