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_csv
的sep
参数:
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空闲)