将一个表中的子字符串字符串替换为整个列的另一个表中的字符串

时间:2016-06-23 18:22:22

标签: python string pandas

每当数据框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。

我不确定尝试更新的其他方法。我已经被困在这一天超过一天,并会感激任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

如果两个数据帧按行排列,或者每个数据帧都有一个已经确保匹配正确行的索引,那么这应该有效:

dfb.combine_first(dfa)

如果它没有排成一行,意思是"玻利维亚"在dfa和"玻利维亚,多民族国家"在dfb中标记为第11行,那么你还有另一个问题。