【问题标题】:how to merge two pandas dataframe on slightly different keys [closed]如何在略有不同的键上合并两个熊猫数据框[关闭]
【发布时间】:2021-02-23 10:21:05
【问题描述】:

我想基于键 institution 合并两个数据集,该键在两个数据帧中的写入方式不同。数据框如下所示:

df1 = pd.DataFrame({'institution':['Havard University', 'Oxford University', 'University of Kent', 'Harvard University']})
df2 = pd.DataFrame({'institution':['Havard University', 'University of Oxford', 'Kent University'], 'ranking': ['very good', 'very good', 'good']})

我该怎么做?

【问题讨论】:

  • 请向我们展示您的预期结果以及您的尝试。

标签: python pandas merge


【解决方案1】:

你可以使用模糊合并。

您可以在以下链接中检查不同类型的方法。 fuzzy_pandas, different types of string similarity algorithms

import fuzzy_pandas as fpd
merged_df=fpd.fuzzy_merge(df1, df2, left_on=['name'],right_on=['name'],method='jaro', ignore_case=True,threshold=0.9)

【讨论】:

  • 谢谢!不幸的是,它不适用于大型数据集。我收到此错误:6 frames /usr/local/lib/python3.6/dist-packages/csvmatch.py in <listcomp>(.0) 66 67 def process_ignore_case(row): ---> 68 return [value.lower() for value in row] 69 70 def process_ignore_nonalpha(row): AttributeError: 'float' object has no attribute 'lower'
  • 哦!此错误是因为您需要将发生合并的列中的 NA 值替换为空字符串
  • 谢谢!另一个问题:不再有错误,但模糊的熊猫在 ca 之后停止了。样本的 25%。已经查出的机构不再合并。知道为什么吗?
  • 我没有得到这个问题。你能解释一下吗?
  • 我不得不重置索引,然后它就可以正常工作了!
【解决方案2】:

您可以创建映射函数:

mapping = {'Havard University':'Harvard University','Oxford University':'University of Oxford','University of Kent':'Kent University','Harvard University':'Harvard University'}

df1['institution'] = df1.institution.map(mapping)
df1.merge(df2,on='institution',how='left')

输出:

            institution    ranking
0    Harvard University        NaN
1  University of Oxford  very good
2       Kent University       good
3    Harvard University        NaN

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 2021-09-02
    • 2017-06-11
    • 2016-01-01
    相关资源
    最近更新 更多