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