python - 无法在熊猫数据框中正确解码重音
问题描述
我正在尝试为 Dataphile(我的 YouTube 频道)与“获得最多奥运奖牌的柔道运动员”进行条形图比赛。这是我的问题:一些运动员在我的数据集 (csv) 中的名字中有口音,我无法正确解码它们。
例如,在我的第 5 行数据集中,ahtlete 的名字是“Andreas Tölzer”。
这是我的代码:
years = [str(y) for y in range(1972,2020, 4)]
sex = ["mens", "womens"]
cat = ["extra-lightweight", "lightweight", "half-lightweight", "half-middleweight", "middleweight", "half-heavyweight", "heavyweight", "open-class"]
df_results = pd.DataFrame(columns=["Athlete"] + years)
all_df = {}
for s in sex: # gets all sexes
for c in cat: #gets all weight categories
for y in years: # gets all years with summer olympics
try:
all_df[y] = pd.read_csv(r"C:\Users\joris\Coding\judo_olympics\olympics_summer_" + y + "_JUD_" + s + "-" + c +"_final_standings.csv")
df_med = all_df[y].head(4)[["Athlete"]]
iter_years = iter(years)
for w in years:
if int(w) >= int(y):
df_med.insert(len(df_med.columns), w, 1)
else:
df_med.insert(len(df_med.columns), w, 0)
df_results = df_results.append(df_med)
except FileNotFoundError:
pass
df_results = df_results.groupby("Athlete").sum()
df_results.index = df_results.index.str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8') # got that from the internet
在这里,我们可以看到运动员的名字在输出中没有被正确解码。
我想要的是简单地将带重音的字母更改为没有重音的相同字母(例如:“é”将变为“e”)。
我的数据集中不应该有来自其他字母的字母,只有烦人的口音。
如果您有解决方案或者您需要我的代码中的更多信息,请告诉我。
谢谢 !
解决方案
有一个 Python 包 Unidecode 可用于此目的。
pip install --user unidecode
然后,在 Python 中:
>>> from unidecode import unidecode
>>> print(unidecode('Ölfäßchen'))
'Olfasschen'
推荐阅读
- python - Python - 如何使用while循环和for循环从列表中随机删除一个项目,直到列表为空
- javascript - Mailapp 并以正确的格式保存附件
- python - 删除选择放大和轴平移短划线
- django - 它似乎没有任何模式。如果您在文件中看到有效模式,则问题可能是由循环导入 .Django 3.0.2 引起的
- java - JFugue:有没有办法获取 player() 所在的当前音符?
- unity3d - 如何跟踪受到的伤害?
- brightway - GSA 活动浏览器错误:数组不得包含 infs 或 NaN
- python - 来自数据集的 load_dataset('multi_nli') 不起作用,出现导入错误
- scala - Play Framework Scala Hello-World 在 Ubuntu 20 上失败
- javascript - 使用 jQuery 更改 Href 后重置 Href