簡體   English   中英

不區分大小寫的熊貓 dataframe.merge

[英]Case insensitive pandas dataframe.merge

我正在努力尋找在熊貓中進行不區分大小寫合並的最簡單方法。 有沒有辦法在合並時做到這一點? 我是否需要使用 (?i) 或帶忽略大小寫的正則表達式? 在我下面的代碼片段中,我加入了一些國家,其中一個文件中可能是“美國”,另一個文件中可能是“美國”,我只是想把這個案例排除在外。 謝謝!

import pandas as pd
import csv
import sys

env_path = sys.argv[1]
map_path = sys.argv[2]


df_address = pd.read_csv(env_path + "\\address.csv")
df_CountryMapping = pd.read_csv(map_path + "\CountryMapping.csv")

df_merged = df_address.merge(df_CountryMapping, left_on="Country", right_on="NAME", how="left")

....

將用於合並的兩列中的值小寫,然后在小寫的列上合並

df_address['country_lower'] = df_address['Country'].str.lower()
df_CountryMapping['name_lower'] = df_CountryMapping['NAME'].str.lower()
df_merged = df_address.merge(df_CountryMapping, left_on="country_lower", right_on="name_lower", how="left")
df_merged = pd.merge(df_address, df_CountryMapping, left_on=df_address["Country"].str.lower(), right_on=df_CountryMapping["NAME"].str.lower(), how="left")

我建議在閱讀后降低列名

df_address.columns=[c.lower() for c in df_address.columns]
df_CountryMapping.columns=[c.lower() for c in df_CountryMapping.columns]

然后更新值

df_address['country']=df_address['country'].str.lower()
df_CountryMapping['name']=df_CountryMapping['name'].str.lower()

然后才進行合並

df_merged = df_address.merge(df_CountryMapping, left_on="country", right_on="name", how="left")

一種解決方案是將兩個數據框的列名都轉換為小寫。 所以像這樣:

df_address = pd.read_csv(env_path + "\\address.csv")
df_CountryMapping = pd.read_csv(map_path + "\CountryMapping.csv")

df_address.rename(columns=lambda x: x.lower(), inplace=True)
df_CountryMapping.rename(columns=lambda x: x.lower(), inplace=True)

df_merged = df_address.merge(df_CountryMapping, left_on="country", right_on="name", how="left")

另一種選擇是使用“.str.casefold()”來更全面地結合 ASCII 和不同語言的字符。 如果您只使用英文字母字符,它應該與“.str.lower()”相同

df_address['country_casefolded'] = df_address['Country'].str.casefold()
df_CountryMapping['name_casefolded'] = df_CountryMapping['NAME'].str.casefold()
df_merged = df_address.merge(df_CountryMapping, left_on="country_casefolded", right_on="name_casefolded", how="left")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM