[英]Convert Latin letters to its corresponding English alphabet in pandas
我在 pandas 中有一个数据框,其中包含餐厅名称,但问题是一些餐厅名称包含拉丁字母,例如 Cafe 中的 é,Yauatcha Pâtisserie 中的 â 都由 pandas 以不同方式编码,例如 Yauatcha Pâtisserie 由 pandas 编码为
Yauatcha PÃ\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢tisserie
不同类型的餐厅名称包含不同的拉丁字母,这些字母由 pandas 进行不同的编码。 有什么办法可以找回拉丁字母或其对应的英文字母吗?
您可以在此处下载数据集。 我尝试使用 python 的 unicode 库,但这似乎不起作用。 这是我尝试过的:
import pandas as pd
import unidecode
df = pd.read_csv(r"stod.csv", encoding='latin1')
df['name'].apply(unidecode.unidecode)
那么有没有办法从这个乱码中找回拉丁字母
Yauatcha PÃ\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢tisserie
注意:我尝试了所有可能的解决方案来解决这个问题,但没有一个对我有用。
这是一个多重mojibake 。 我可以还原它(请参阅以下脚本中的demoji(x)
函数)。 为了完整起见, moji(x)
函数显示了 mojibake 机制:
def demoji(x):
global ii
try:
y = x.encode('latin-1').decode('utf-8')
ii += 1
except:
y = x
ii = -ii
return y
def moji(x):
return x.encode('utf-8').decode('latin-1','backslash replace')
xx = 'PÃ\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢tisserie'
zz = xx
print("values xx and zz (initial): {}".format(repr(xx)))
ii = 0
while ii >= 0:
xx = demoji(xx)
yy = xx
print("values xx and yy after {} demoji(xx) iterations: {}".format(-ii,repr(xx)))
for i in range(-ii):
yy = moji(yy)
print("values yy and zz after {} moji(yy) iterations are equal: {}".format(-ii, yy==zz))
结果: .\SO\55721108.py
values xx and zz (initial): 'PÃ\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x83Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x83Ã\x83Â\x82Ã\x82Â\x82Ã\x83Â\x83Ã\x82Â\x82Ã\x83Â\x82Ã\x82¢tisserie' values xx and yy after 7 demoji(xx) iterations: 'Pâtisserie' values yy and zz after 7 moji(yy) iterations are equal: True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.