使用pandas datafram在python中将utf转换为ascii

2024-09-30 01:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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)

所以说结果应该是这样的。。。在

^{pr2}$

然而,ASCII列只是token列的重复,而不是上面期望的结果?我在另一个脚本上手动运行了convertscii代码,它做了我想要它做的,但是不确定pandas有什么bug?在


Tags: 数据intesttokendataframeasciiunicode字符
2条回答

我认为需要^{},但首先需要^{},以dictionary避免丢失字符:

test = pd.DataFrame({'token':['qurbangaha','saylı','öhdəliyi','ki','ilişib']})
print (test)
        token
0  qurbangaha
1       saylı
2    öhdəliyi
3          ki
4      ilişib

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'}

test['ascii'] = (test['token'].astype("str")
                              .str.rstrip()
                              .replace(characterMap, regex=True)
                              .str.normalize('NFKD')
                              .str.encode('ascii', errors='ignore')
                              .str.decode('utf-8'))

print (test)
        token       ascii
0  qurbangaha  qurbangaha
1       saylı       sayli
2    öhdəliyi    ohdeliyi
3          ki          ki
4      ilişib      ilisib

如果在dictionary中定义了所有可能的值,则应简化解决方案:

^{pr2}$

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

import unicodedata

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

示例:

^{pr2}$

输出:

0       sayl
1    ohdliyi

相关问题 更多 >

    热门问题