gpt4 book ai didi

python - 将 2 个数据帧与索引连接为字符串列表时出错

转载 作者:行者123 更新时间:2023-12-01 06:59:36 25 4
gpt4 key购买 nike

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

类型错误:无法连接 ['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']

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

谢谢。

最佳答案

使用pd.concatsort=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

关于python - 将 2 个数据帧与索引连接为字符串列表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com