将大写的拉丁字母转换为相应的英文字母

时间:2019-04-17 06:20:46

标签: python pandas unicode apply latin

我在熊猫中有一个数据框,其中包含餐厅名称,但问题是一些餐厅名称中包含拉丁字母,例如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恢复拉丁字母。

任何帮助将不胜感激。

注意:我尝试了所有可能的建议来解决该问题,但没有一个对我有用。

1 个答案:

答案 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