我有一个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可以出现在任何列中。我该怎么做?
答案 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)