首页 > 解决方案 > 使用将csv数据读入熊猫时如何用类似的“英文字母”字符替换特殊字符?

问题描述

encoding='latin1'我已经使用因为UTF-8导致错误将 csv 导入到 pandas 数据框。数据导入没有错误,但我最终会使用?字符而不是更有意义的替换

如何使用更准确的替换字符清理导入的数据?例如,字符串'Mořic''Mo?ic'而不是'Moric'当我使用时pd.read_csv('data.csv',delimiter=',',encoding='latin1')

使用这篇文章我设法得到

import unicodedata
#this also works with 'niña'

example = 'Mořic'
nfd_example = unicodedata.normalize("NFD", str(example))
print('original: ',nfd_example)
print('cleaned: ',nfd_example.encode('latin1', 'ignore'))

出去:

original:  Mořic
cleaned:  b'Moric'

因此,我尝试使用此答案中代码的改编版本将其应用于我的数据集,以提供:

with open('data.csv', 'r', encoding='latin1') as f, open('data-fixed.csv', 'wb') as g:
    content = unicodedata.normalize("NFD",f.read())
    g.write(content.encode('latin1','ignore'))

df = pd.read_csv('data-fixed.csv',delimiter=',',encoding='latin1')

这适用于'niña'as 'nina',但其他的,例如'Mořic'仍然'Mo?ic'

Pandas 1.3.0 实际上有一个新功能encoding_errors,但由于我有一个旧版本,无法使用它。因此,我试图encode('latin1','ignore')从上面应用该方法,但不确定如何将其应用于pd.read_csv()- 也许有更好的方法可以不使用encode()

标签: pandasdataframeunicode-string

解决方案


推荐阅读