每当数据框dfa和dfb之间存在匹配的列/键时,我想在数据框a中更改数据框a中的国家/地区名称。
dfa数据:
的国家
玻利维亚
波黑
dfb数据:(完整且正确的数据)
ISO国家
BOL'玻利维亚,多民族国家
BIH波斯尼亚和黑塞哥维那
首先,我尝试根据国家/地区合并表dfa和dfb,然后根据喜欢进行字符串替换,但由于某些未知原因,任何带逗号的字符串仍然不匹配
dfa.ix[dfa.Country=='Bolivia', 'Country'] = 'Bolivia, Plurinational State of'
这是因为替换发生了,但是当数据与包含这个精确字符串的第二个表进行比较时,它并没有看到它是相等的,所以当我合并表时不会更新null。
dfab_merge_null = dfab_merge.loc[dfab_merge['ISO'].isnull()]
dfab_merge_null.Country.unique()
阵列(['亚速尔群岛','玻利维亚,多民族国家',' Canary Is', '伊朗,伊斯兰共和国', "韩国,民主人民共和国",'韩国,共和国', '马其顿,前南斯拉夫共和国', '密克罗尼西亚\,联合国','摩尔多瓦共和国', '巴勒斯坦(西岸)'圣基茨和尼维斯&...等等
dfa不包含ISO列,这是我想要最终添加的。
dfb包含我试图根据两个表之间的Country中松散匹配的字符串名称转移到dfa的ISO。
我不确定尝试更新的其他方法。我已经被困在这一天超过一天,并会感激任何帮助。 谢谢!
答案 0 :(得分:0)
如果两个数据帧按行排列,或者每个数据帧都有一个已经确保匹配正确行的索引,那么这应该有效:
dfb.combine_first(dfa)
如果它没有排成一行,意思是"玻利维亚"在dfa和"玻利维亚,多民族国家"在dfb中标记为第11行,那么你还有另一个问题。