代码之家  ›  专栏  ›  技术社区  ›  user496181

pandas的数据帧合并挑战具有相同的字符串但不同的unicode

  •  0
  • user496181  · 技术社区  · 1 年前

    当我用来合并两个数据集的两列中的某些行具有不同的unicode时,即使字符串相同,我在使用pd.merge时也会遇到问题。以下是一个示例:

    我有两个数据集data1和data2,它们都有两个共同的列,“state”和“country”,这将是我用来合并这两个数据集中的列。我在两个数据集中检查了“state”和“country”的数据类型。他们都属于“str”类。

    通过使用

    data_merge = pd.merge(data1, data2, on=['county','state'],how='right') 
    

    我应该在数据1行308和数据2行20691之间有一个匹配项,但由于数据1行308'中的'country'和20691行中的'county'具有不同的Unicode,所以不匹配:

    enter image description here

    我研究了这两个词的unicode(unicode1是data1中的县的unicode,unicode2是data2中的县),它们确实不同:

    enter image description here

    如何将这两个数据集与此问题合并?有没有办法让pd.merge忽略unicode的差异?非常感谢。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Carbon    1 年前

    好吧,unicode的区别是小写k和大写k——你可以用它来证明自己 print(chr(107),chr(75)) 。合并小写可能会解决你的问题。

    然而,假设你喜欢右边的资本化,并希望保留它们。因为您正在进行正确的合并,所以我们可以知道,合并后的索引与进入时的索引相同。因此,请在合并前复制大写值,然后替换它们。

    import pandas as pd
    
    print(chr(107), chr(75))  # k K
    
    data1 = pd.DataFrame({'county': ['mckinley', 'bell'], 'state': ['NM', 'tx'],'amount': [1, 2]})
    data2 = pd.DataFrame({'county': ['mckinley', 'beLL', 'harris'], 'state': ['NM', 'TX','tx']})
    
    #Optional: To preserve caps
    orig_caps = data2[['county','state']].copy()
    
    for item in ['county', 'state']:
        data1[item] = data1[item].str.lower()
        data2[item] = data2[item].str.lower()
    
    data_merge = pd.merge(data1, data2, on=['county', 'state'], how='right')
    data_merge[['county','state']] = orig_caps
    print(data_merge)
    

    收益率:

         county state  amount
    0  mckinley    NM     1.0
    1      beLL    TX     2.0
    2    harris    tx     NaN
    
    推荐文章