【问题标题】:Python Dataframe Merge: string capitalization issuePython Dataframe Merge:字符串大写问题
【发布时间】:2019-03-30 07:08:48
【问题描述】:

当我尝试根据列的值合并两个不同的数据集时,我注意到如果大写相同,两张表中的列值将正确匹配。但是,如果大小写不同,即使字符串相同,Python 也无法识别 df1 和 df2 的对应值。

有没有办法在不改变数据集内容的情况下做到这一点?

merged_df = pd.merge(df1, df2, on=['column1'], how = 'left')
merged_df.drop_duplicates(keep='first', inplace=True)
merged_df.to_csv('report.csv', index=False)

【问题讨论】:

  • 如果大小写不同,则字符串相同。你为什么不把大写规范化
  • 如果您想在比较中有效地忽略大小写,可以使用字符串方法str.lower()。但是,是的,'ThisString'!='thisstring'
  • 你可以使用left_onright_on
  • 有什么方法可以在合并语句中实现这一点吗?

标签: python string pandas dataframe merge


【解决方案1】:

通过pd.Series.str.lower 在合并之前规范化你的字符串。如果出于某种原因,您不想更改原始数据框,可以使用pd.DataFrame.assign

merged_df = pd.merge(df1.assign(column1=df1['column1'].str.lower()),
                     df2.assign(column1=df2['column1'].str.lower()),
                     on='column1', how='left')

【讨论】:

    【解决方案2】:

    一种易于理解的方法,

    df1['column1']=df1['column1'].str.lower()
    df2['column2']=df2['column2'].str.lower()
    

    然后继续您的代码。

    【讨论】:

    • 我会走这条路,谢谢。我只是想知道是否有办法在不改变数据集内容的情况下做到这一点。
    • @Ashutosh.. df2['column1']=df2['column1'].str.lower() ,只是为了或不同而改变第二次出现,
    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2010-10-11
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2010-11-08
    • 2013-01-16
    相关资源
    最近更新 更多