将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字符)?是否有办法使用例如'to-tab'方法(我认为不存在)写到以制表符分隔的文件而不是CSV?

解决办法

要用制表符定界,你可以使用to_csvsep参数。

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

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

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

当你使用 "to_csv "方法将一个 "DataFrame "对象存储到一个csv文件时,你可能不需要存储 "DataFrame "对象的每个的**前的索引。

你可以通过给index参数传递一个False布尔值来避免**。

有点像

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

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

  Color  Number
0   red     22
1  blue     10

  Color  Number
0   red     22
1  blue     10

csv文件将存储。

Color,Number
red,22
blue,10

而不是(当默认值True被传递时)

,Color,Number
0,red,22
1,blue,10
评论(1)

如果你在编码时遇到问题,想逐个单元进行编码,你可以尝试以下方法:'utf-8'。

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('Regenexx\xae',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
评论(0)

有时候,如果你也指定了UTF-8编码,你会面临这些问题。 我建议你在读文件时指定编码,在写文件时指定相同的编码。 这可能会解决你的问题。

评论(0)

要将pandas DataFrame写入CSV文件,你需要DataFrame.to_csv。 这个函数提供了许多合理的默认参数,你经常需要覆盖这些参数以适应你的特定使用情况。 例如,你可能想使用不同的分隔符,改变日期时间的格式,或者在写入时放弃索引。 to_csv有一些参数,你可以通过这些参数来解决这些需求。

这里'是一个表格,列出了一些常见的写入CSV文件的情况,以及你可以为它们使用的相应参数。

![写到CSV马老兄][1] 。

脚注脚注

  1. 默认的分隔符被假定为逗号(',')。 除非你知道你需要这样做,否则不要改变它。 2;

  2. 默认情况下,df的索引被写成第一列。 如果你的DataFrame没有索引(IOW,df.index是默认的RangeIndex),那么你要在写的时候设置index=False。 用另一种方式来解释,如果你的数据确实有索引,你可以(也应该)使用index=True或者完全不使用它(因为默认是True)。

  3. 如果你正在写字符串数据,最好设置这个参数,以便其他应用程序知道如何读取你的数据。 这也将避免你在保存时可能遇到的任何潜在的UnicodeEncodeErrors。

  4. 如果你要将大的DataFrames(>100K行)写到磁盘上,建议进行压缩,因为这将导致更小的输出文件。 &gt。 OTOH,这将意味着写入时间会增加(因此也会导致 读取时间,因为文件需要解压)。 读取时间,因为文件需要解压)。)

[1]: https://i.stack.imgur.com/RsIO7.png

评论(0)

它可能不是这种情况下的答案,但我有同样的错误信息与.to_csv</i&gt。 我尝试了.toCSV('name.csv') 和错误信息不同("'SparseDataFrame' 对象没有属性'toCSV'")。 于是,将数据帧转为密集数据帧,问题就解决了。

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

在Windows上用全路径导出文件的例子,如果你的文件有头文件的话。

df.to_csv (r'C:\Users\John\Desktop\export_dataframe.csv', index = None, header=True) 

例如,如果您想将文件存放在与您的脚本所在的同一目录下的export文件夹中,使用utf-8编码和tab作为分隔符。

df.to_csv(r'./export/dftocsv.csv', sep='\t', encoding='utf-8', header='true')
评论(0)