上传python数据帧时出现Unicode编码错误

时间:2016-12-20 17:46:41

标签: python pandas dataframe

我有一个python pandas数据框,它读取这样的csv或excel文件:

if fileType == 'csv':
            df = pd.read_csv( templateFilePath, converters=converters )
        else:
            df = pd.read_excel( templateFilePath, sheetname=sheetName, converters=converters )

        df.fillna( '', inplace=True )

在我尝试上传的其中一个文件中,它有价值:Banque des Règlements Internationaux (BRI) - Bâle / Bank for International Settlements

我因此而一直收到此错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-15: ordinal not in range(128)

我该如何解决这个问题?

更新:

这样做:

        if fileType == 'csv':
            df = pd.read_csv( templateFilePath, converters=converters )
        else:
            df = pd.read_excel( templateFilePath, sheetname=sheetName, converters=converters )

        df.fillna( '', inplace=True )
       # for col in colNames:
        df['COUNTRY_NAME']=df['COUNTRY_NAME'].map(lambda x: x.encode('unicode-escape').decode('utf-8'))

它修复了上传文件时出现的错误。但我不想指定任何列名称(例如此处我指定' country_name')因为unicode可以出现在任何列中。我该怎么做?

1 个答案:

答案 0 :(得分:0)

我遇到UnicodeEncodeError并使用encoding=latin-1来修复代码:

if fileType == 'csv':
    try:
        df = pd.read_csv( templateFilePath, converters=converters )
    except UnicodeDecodeError:
        df = pd.read_csv( templateFilePath, converters=converters, encoding='latin-1' )

编辑:

我不认为这个问题有意义了。在任何情况下,这里都是对你的另一个(看似无关的)问题的答案:

def re_encode(x):
    try:
        x_ = x.encode('unicode-escape').decode('utf-8')
    except:
        x_ = x
    return x_

df = df.applymap(re_encode)