UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in positio...
本帖最后由 天使与魔鬼 于 2018-9-18 17:49 编辑在我将dataframe写入到csv文件中时
df.to_csv('out.csv')
报了下面的错误
UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128)
有没有办法轻松解决这个问题(即我的dataframe中有unicode字符)?有没有办法使用例如'to-tab'方法(我认为不存在)写入制表符分隔文件而不是CSV?
要通过选项卡分隔,可以使用以下sep参数to_csv:
df.to_csv(file_name, sep='\t')
要使用特定编码(例如'utf-8'),请使用以下encoding参数:
df.to_csv(file_name, sep='\t', encoding='utf-8')
当你存储DataFrame对象转换成csv文件使用to_csv方法,你大概不会存储有各行序号的DataFrame对象。
您可以通过将布尔值传递给参数来避免这种情况。Index=False
有点像:
df.to_csv(file_name, encoding='utf-8', index=False)
因此,如果您的DataFrame对象是这样的:
ColorNumber
0 red 22
1blue 10
csv文件将存储:
Color,Number
red,22
blue,10
而不是(传递默认值 的情况True)
,Color,Number
0,red,22
1,blue,10
如果您遇到编码为'utf-8'的问题,并且想要逐个单元格地进行,您可以尝试以下其他方法。
Python 2
(其中“df”是您的DataFrame对象。)
for column in df.columns:
for idx in df.index:
x = df.get_value(idx,column)
try:
x = unicode(x.encode('utf-8','ignore'),errors ='ignore') if type(x) == unicode else unicode(str(x),errors='ignore')
df.set_value(idx,column,x)
except Exception:
print 'encoding error: {0} {1}'.format(idx,column)
df.set_value(idx,column,'')
continue
然后尝试:
df.to_csv(file_name)
________________________________________
可以通过以下方式检查列的编码:
for column in df.columns:
print '{0} {1}'.format(str(type(df)),str(column))
警告:errors ='ignore'只会省略字符,例如
IN: unicode('Regenexx\xae',errors='ignore')
OUT: u'Regenexx'
Python 3
for column in df.columns:
for idx in df.index:
x = df.get_value(idx,column)
try:
x = x if type(x) == str else str(x).encode('utf-8','ignore').decode('utf-8','ignore')
df.set_value(idx,column,x)
except Exception:
print('encoding error: {0} {1}'.format(idx,column))
df.set_value(idx,column,'')
continue
问题不错哦
页:
[1]