使用pandas数据帧在python中将utf转换为ascii

Bao*_*hai 6 python unicode pandas

我正在尝试将 unicode 字的 DataFrame 中的数据转换为 ASCII 到具有某些字符更改的新列...

characterMap = {u'\u00E7': 'c', u'\u00C7' : 'C', u'\u011F' : 'g', u'\u011E' : 'G', u'\u00F6': 'o', u'\u00D6' : 'O', u'\u015F' : 's', u'\u015E' : 'S', u'\u00FC' : 'u', u'\u00DC' : 'U' , u'\u0131' : 'i', u'\u0049' : 'I', u'\u0259' : 'e', u'\u018F' : 'E'}

def convertASCII(word):
    asciiWord = ""
    word = str(word).rstrip()
    for c in word:
        if c in characterMap.keys():
            asciiWord = asciiWord + characterMap[c]
        else:
            asciiWord = asciiWord + c
    return asciiWord;

test['ascii'] = test['token'].apply(convertASCII)
Run Code Online (Sandbox Code Playgroud)

所以说结果应该是这样的......

               token         ascii
1555757    qurbangaha    qurbangaha
379221          sayl?         sayli
2456599      öhd?liyi      ohdeliyi
1128903            ki            ki
467997         ili?ib        ilisib
Run Code Online (Sandbox Code Playgroud)

但是,ASCII列只是token列的重复,而不是上面想要的结果?我已经在另一个脚本上手动运行了 convertASCII 代码,它做我想做的事,但不确定熊猫的错误​​是什么?

Vik*_*ngh 8

如果您尝试进行的 unicode 转换是标准的,那么您可以直接转换为 ascii。

import unicodedata

test['ascii'] = test['token'].apply(lambda val: unicodedata.normalize('NFKD', val).encode('ascii', 'ignore').decode())
Run Code Online (Sandbox Code Playgroud)

例子:

import unicodedata
data = [{'name': 'sayl?'}, {'name': 'öhd?liyi'}]
df = pd.DataFrame.from_dict(data, orient='columns')
df['name'].apply(lambda val: unicodedata.normalize('NFKD', val).encode('ascii', 'ignore').decode())
Run Code Online (Sandbox Code Playgroud)

输出:

0       sayl
1    ohdliyi
Run Code Online (Sandbox Code Playgroud)