使用join连接两个DataFrame出现值错误,求原因及解决方法
问题描述
我有两个DataFrame:
第一个DataFrame(命名为a1):
Country electricity price 23 Pakistan 0.042 24 Afghanistan 0.042 25 Argentina 0.042 26 Sri Lanka 0.043 27 Egypt 0.043
第二个DataFrame(命名为b1):
Country Meal, Inexpensive Restaurant Cappuccino (regular) 0 Afghanistan 1.70 1.08 1 Aland Islands 12.15 3.53 2 Albania 4.31 1.10 3 Alderney 21.61 3.41 4 Algeria 2.13 0.57
Afghanistan是两者的共同行
我尝试用a1.join(b1,on='Country')连接它们,却一直报这个值错误:
ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
我已经确认两个DataFrame的Country列都是字符串类型,且没有空值,请问这个错误的原因是什么?
错误原因及解决办法
核心原因:用错了join()的on参数
pandas的join()方法默认是按索引做连接的。你用a1.join(b1, on='Country')时,这个on参数的意思是:把a1的Country列临时当作索引,去匹配b1的索引——而不是让两个DataFrame按Country列直接连接。
你的b1索引是默认的整数类型(int64),a1的Country列是字符串类型(object),类型不匹配,所以触发了这个错误。
正确的连接方式
如果要基于Country列连接,有两种简单方法:
- 用
merge()方法(推荐,逻辑更清晰):
pd.merge(a1, b1, on='Country', how='inner')
how参数可以根据需求选inner/left/right/outer,对应不同的连接类型。
- 先把
Country设为索引再用join():
a1.set_index('Country').join(b1.set_index('Country'))
内容的提问来源于stack exchange,提问作者Moataz Imad
相关产品推荐
相关产品推荐

