python - python - 将Pandas DataFrame写入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字符?

时间:

要分隔的话, 你可以使用sep参数,to_csv :


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



python 2

(其中"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))



警告errors =\'ignore\'将省略字符,例如,


IN: unicode(\'Regenexxxae\',errors=\'ignore\')


OUT: u\'Regenexx\'



python 3


for column in df.columns:


 for idx in df[column].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



通过将 turning dataframe变为dense dataframe 来解决问题,


df.to_dense().to_csv("submission.csv", index = False, sep=\',\', encoding=\'utf-8\')



...