协慌网

登录 贡献 社区

将 pandas DataFrame 写入 CSV 文件

我在熊猫中有一个数据框,我想将其写入 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_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

要将 pandas DataFrame 写入 CSV 文件,您需要DataFrame.to_csv 。此函数提供许多具有合理默认值的参数,您将经常需要覆盖这些参数以适合您的特定用例。例如,您可能要使用其他分隔符,更改日期时间格式或在写入时删除索引。 to_csv具有您可以传递来满足这些要求的参数。

下表列出了一些写入 CSV 文件的常见情况以及可以用于它们的相应参数。

写入CSV ma dude

脚注

  1. 假定默认分隔符为逗号( ',' )。除非您知道需要,否则请勿更改此设置。
  2. 默认情况下, df的索引被写为第一列。如果您的 DataFrame 没有索引(IOW, df.index是默认的RangeIndex ),则在写入时index=False用另一种方式来解释这一点,如果您的数据确实具有索引,则可以(并且应该)使用index=True或完全将其忽略(默认值为True )。
  3. 如果要写入字符串数据,则最好设置此参数,以便其他应用程序知道如何读取数据。这也将避免在保存时可能遇到的UnicodeEncodeError
  4. 如果将大型 DataFrame(> 100K 行)写入磁盘,则建议进行压缩,因为压缩将导致输出文件小得多。 OTOH,这意味着写入时间将增加(因此,由于需要解压缩文件,因此读取时间也将增加)。