天使与魔鬼 发表于 2018-9-18 16:33:52

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?

强人锁男 发表于 2018-9-18 16:35:34

要通过选项卡分隔,可以使用以下sep参数to_csv:
df.to_csv(file_name, sep='\t')

要使用特定编码(例如'utf-8'),请使用以下encoding参数:
df.to_csv(file_name, sep='\t', encoding='utf-8')

令狐少侠 发表于 2018-9-18 16:36:33

当你存储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

蛋蛋超人 发表于 2018-9-18 16:37:46

如果您遇到编码为'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

上条把妹之手 发表于 2018-10-10 08:14:40

问题不错哦
页: [1]
查看完整版本: UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in positio...