python - 使用索引作为字符串列表连接 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],'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.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
推荐阅读
- npm - 如果文件夹已经存在,Gulp imagemin 跳过文件夹创建
- spring - Kotlin Failsafe 新参数
- excel - 使用VBA代码从excel打印时如何激活PDF中的超链接
- web-services - 如何根据环境选择 Web 应用程序内部暴露的服务?
- android-studio - Android Studio 4.2.1 jarsigner 现在在哪里?
- html - 如何通过 html 和 css 与 flex 属性或其他东西来实现这种设计
- ios - 使用 rn-fetch-blob 将图像 (iOS) URI 从 react-native-image-picker 转换为路径
- apache - vendor.js:1 WebSocket 连接到 'wss://xxxxx.com/abc/def 失败:WebSocket 握手期间出错:意外响应代码:302
- json - Django REST 框架导出到 json
- uitableview - 为什么标签不适合tableviewcell?