熊猫未合并在不同的列上-键错误或NaN

时间:2019-05-07 23:28:06

标签: python pandas

我正在尝试用当前数据模拟我的问题。我正在尝试使用pandas在不同的列名称(代码和数字)上合并两个数据框,并仅从df2(位置)中提取一列。我收到密钥错误或NaN。

  • 两者都是作为数据帧导入的CSV文件;
  • 两个列名都没有空格;
  • 两列都具有相同的d.type

我尝试在这里查看其他答案,从字面上复制并粘贴已编码的答案填充到我的部分中,但仍然会出现错误或NaN。

df1:
[['Name', 'Income', 'Favourite superhero', 'Code', 'Colour'], 
['Joe', '80000', 'Batman', '10004', 'Red'], 
['Christine', '50000', 'Superman', '10005', 'Brown'], 
['Joey', '90000', 'Aquaman', '10002', 'Blue']

df2:
[['Number', 'Language', 'Location'], 
['10005', 'English', 'Sudbury'], 
['10002', 'French', 'Ottawa'], 
['10004', 'German', 'New York']]


what I tried:

data = pd.merge(CSV1, 
                  CSV2[['Location']],
                  left_on='Code',
                  right_on='Number',
                  how='left')

data = pd.merge(CSV1, 
                  CSV2[['Location']],
                  left_on='Code',
                  right_index=True,
                  how='left')

I am trying to have df1 with the location column from df2 for each instance where Number 
and Code are the same.

1 个答案:

答案 0 :(得分:0)

对于这两个命令,都需要在右侧数据框中存在Number。对于第一个命令,您需要在Number之后放置merge列。对于第二条命令,您需要在正确切片的数据帧上set_index,而无需删除Number。我相应地修改了您的命令:

CSV1.merge(CSV2[['Number', 'Location']], left_on='Code', right_on='Number', how='left').drop('Number', 1)

CSV1.merge(CSV2[['Number', 'Location']].set_index('Number'), left_on='Code', right_index=True, how='left')


Out[892]:
        Name Income Favourite superhero   Code Colour  Location
0        Joe  80000              Batman  10004    Red  New York
1  Christine  50000            Superman  10005  Brown   Sudbury
2       Joey  90000             Aquaman  10002   Blue    Ottawa