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

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

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],11]})

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

代码:

    import pandas as pd

    a=pd.DataFrame({'a1':[1,11]})

    b=pd.DataFrame({'b1':[5,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,'i':['i7','i10','i11']})

    b=pd.DataFrame({'b1':[5,'i11']})

    print('\na:\n','\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,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']

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

谢谢。

ychzd_ok 回答:将带有索引作为字符串列表的2个数据帧连接在一起时出错

pd.concat sort=False 一起使用:

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

如果上一个选项不起作用,请使用:DataFrame.merge

c=a.merge(b,on='i',how='outer').set_index('i')

输出:

     a1  a2   b1   b2
i7    1   3  5.0  7.0
i10   2   4  NaN  NaN
i11   3   5  6.0  8.0
本文链接:https://www.f2er.com/3165000.html

大家都在问