我在熊猫中有一个数据框,其中包含餐厅名称,但问题是一些餐厅名称中包含拉丁字母,例如Cafe中的é,YauatchaPâtisserie中的â都由熊猫编码,例如,YauatchaPâtisserie由以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
开头的熊猫有多种类型的餐厅名称,其中包含不同的拉丁字母,但熊猫对它们的编码方式不同。有什么办法可以找回拉丁字母或等效的英文字母吗?
您可以下载数据集here。 我尝试使用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
恢复拉丁字母。
任何帮助将不胜感激。
注意:我尝试了所有可能的建议来解决该问题,但没有一个对我有用。
答案 0 :(得分:0)
它是多个 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