pandas写数据框到CSV文件

我有一个pandas数据框,我想写入一个CSV文件。 我正在使用:

df.to_csv('out.csv') 

并得到错误:

 UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b1' in position 20: ordinal not in range(128) 

有没有什么办法可以轻松解决这个问题(即我的数据框中有unicode字符)? 有没有办法写一个制表符分隔的文件,而不是一个CSV使用例如一个“标签”方法(我不认为存在)?

要通过选项卡进行分隔,可以使用to_csvsep参数:

 df.to_csv(file_name, sep='\t') 

要使用特定的编码(例如'utf-8'),请使用encoding参数:

 df.to_csv(file_name, sep='\t', encoding='utf-8') 

我想补充一些 安迪·海登他的确切答案中已经提到的东西 当使用to_csv方法将DataFrame对象存储到csv文件中时 ,您可能不需要存储DataFrame对象每上述索引

您可以通过将False布尔值传递给index参数来避免这种情况。

有点像:

 df.to_csv(file_name, encoding='utf-8', index=False) 

所以如果你的DataFrame对象是这样的:

  Color Number 0 red 22 1 blue 10 

csv文件将存储:

 Color,Number red,22 blue,10 

而不是(通过默认值 True情况下

 ,Color,Number 0,red,22 1,blue,10 

发现它值得分享,干杯! 🙂

如果你指定UTF-8编码,有时候也会遇到这些问题。 我build议你在写入文件的同时读取文件和相同的编码时指定编码。 这可能会解决你的问题。

如果你遇到编码为'utf-8'的问题,你可以尝试一些其他的东西,你可以尝试以下的方法。

(其中“df”是您的DataFrame对象。)

 for column in df.columns: for idx in df[column].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[column][0])),str(column)) 

警告:错误='忽略'将只是省略字符,例如

 IN: unicode('Regenexx\xae',errors='ignore') OUT: u'Regenexx' 

df.to_csv('out.csv',sep =',')

它肯定会工作,将“df”更改为您的数据框名称并运行(使用anaconda空闲)