当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame to_csv方法用法及代码示例


Pandas DataFrame.to_csv(~) 方法将源 DataFrame 转换为逗号分隔值格式。

参数

1.path_or_buf | stringfile handle | optional

写入 csv 的路径。默认情况下,csv 以字符串形式返回。

2. sep | string 长度为 1 | optional

要使用的分隔符。默认情况下,sep=","

3. na_rep | string | optional

用于替换源 DataFrame 中的 NaN 的值。

4. float_format | string | optional

浮点数的格式字符串。

5. columns | sequence | optional

要包含的列的标签。所有其他列都将从生成的 csv 中排除。默认情况下,所有列都包含在生成的 csv 中。

6. header | booleanliststring | optional

是否在 csv 中包含列标签。如果传递字符串列表,那么这些字符串将覆盖现有的列标签。默认情况下,header=True

7. index | boolean | optional

是否在 csv 中包含行标签。默认情况下,index=True

8. index_label | stringsequenceFalseNone | optional

要使用的列标签。默认情况下,index_label=None

9. mode | string | optional

打开文件的模式。默认情况下, mode="w" ,代表写入模式。

10.encoding | string | optional

写入文件时使用的编码。默认情况下,encoding="utf-8"

11.compression | stringdict | optional

要使用的压缩算法。允许的值如下:

"infer" "gzip" "bz2" "zip" "xz"

默认情况下, compression="infer" ,这意味着如果为 path_or_buf 提供了路径,则将从您附加的扩展名推断出压缩算法。例如,如果 path_or_buf"my_data.zip" ,则将使用 "zip" 压缩。如果未提供扩展名,则不会进行压缩。

12.quoting | optional

默认情况下,quoting=csv.QUOTE_MINIMAL

13.quotechar | string 长度为 1 | optional

当一个值恰好包含分隔符时,该值将被错误地分割。您可以使用 quotechar 包装您的值,以防止发生此类不必要的拆分。默认情况下,'"'

14.line_terminator | string | optional

用于指示换行符的字符。默认为 os.linesep

15.chunksize | intNone | optional

一次写入的行数。如果您的 DataFrame 很大,则使用较大的块大小(例如 10000 )可能会带来更好的性能。默认情况下,chunksize=None

16.date_format | string | optional

日期时间对象的格式字符串。

17.doublequote | boolean | optional

是否解析 quotechar 。默认情况下,doublequote=True

18.escapechar | string | optional

用于转义双引号的字符。默认情况下,escapechar=None

19.decimal | string | optional

表示小数点的字符。默认情况下,decimal="." 。该参数的存在是因为法国等一些欧洲国家使用 , 来表示小数点。

返回值

如果指定path_or_buf,则返回None。否则,返回一个字符串。

例子

将 csv 写入文件

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

要将 df 保存为 CSV 文件:

df.to_csv(path_or_buf="my_data")

输出的文件my_data与Python脚本位于同一目录,如下:

,A,B
a,3,5
b,4,6

将 csv 写入字符串

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

要将 df 保存为 csv 字符串,请不要指定 path_or_buf

df.to_csv()



',A,B\na,3,5\nb,4,6\n'

请注意,打印此内容将使 \n 生效:

print(df.to_csv())



,A,B
a,3,5
b,4,6

指定float_format

考虑以下包含浮点数的DataFrame:

df = pd.DataFrame({"A":[3.00005,4],"B":[5,6]}, index=["a","b"])
df



   A        B
a  3.00005  5
b  4.00000  6

为了格式化浮点数(例如要包含多少个小数位),我们使用float_format参数。其语法遵循 Python 标准字符串格式化程序的语法,我们在此详细介绍。

例如,最多包含 3 位小数:

df.to_csv(float_format="%.3f")



',A,B\na,3.000,5\nb,4.000,6\n'

指定列

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

默认情况下,所有列都包含在生成的 csv 中。要仅包含特定列,请指定其列标签,如下所示:

print(df.to_csv(columns=["A"]))



,A
a,3
b,4

指定标题

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

默认情况下, header=True ,这意味着标头包含在生成的 csv 中:

print(df.to_csv())   # header=True



,A,B
a,3,5
b,4,6

要排除标头,请设置header=False,如下所示:

print(df.to_csv(header=False))



a,3,5
b,4,6

我们还可以传递新列标签的列表,如下所示:

print(df.to_csv(header=["C","D"]))



,C,D
a,3,5
b,4,6

指定index_label

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

默认情况下, index_label=None ,这意味着将包含一个空索引标签:

print(df.to_csv())



,A,B
a,3,5
b,4,6

请注意我们在这里如何以逗号开头 - 索引标签为空,但它仍然包含在内。

要删除索引名称,请设置index_label=False,如下所示:

print(df.to_csv(index_label=False))



A,B
a,3,5
b,4,6

某些统计软件(例如 R)可能会发现这种格式更易于解析。

指定引号字符

考虑以下 DataFrame :

df = pd.DataFrame({"A":["3,9",4], "B":[5,6]}, index=["a","b"])
df



   A    B
a  3,9  5
b  4    6

在这里,请注意我们的值之一是 "3,9" ,不幸的是它包含默认分隔符 , 。如果我们将其转换为 csv,我们最终会在第一行中得到 3,9,5,这是不正确的,因为它表明我们在这一行中有 3 个值而不是 2 个。

为了表明 3,9 是一个单一值,to_csv(~) 方法默认用引号 ( " ) 括起来:

df.to_csv(sep=",")



',A,B\na,"3,9",5\nb,4,6\n'

请注意我们现在有"3,9"

我们可以通过传入 quotechar 来指定单个字符作为包装器,而不是 " ,如下所示:

df.to_csv(quotechar="@")



',A,B\na,@3,9@,5\nb,4,6\n'

指定line_terminator

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

默认情况下,每行使用换行符 ( \n ) 进行分割:

df.to_csv()



',A,B\na,3,5\nb,4,6\n'

我们可以通过传入 line_terminator 使用自定义字符来分割行:

df.to_csv(line_terminator="@")



',A,B@a,3,5@b,4,6@'

指定双引号和转义字符

考虑以下 DataFrame :

df = pd.DataFrame({"A":['3"9',4],"B":[5,6]}, index=["a","b"])
df



   A    B
a  3"9  5
b  4    6

请注意 df 如何包含带有单双引号 " 的值。

默认情况下, doublequote=True ,这意味着 quotechar 是重复的,如下所示:

print(df.to_csv())



,A,B
a,"3""9",5
b,4,6

在此,请注意以下事项:

  • 最初的输出是 "3"9" ,其中外部的 "" 表明该值是一个字符串。

  • 这里的问题是,该值实际上包含",因此这会导致语法错误,因为"3"9"不是有效的字符串。

  • 为了克服这个问题,该方法使用 quotechar 转义中间的 " ,默认情况下(令人困惑的是) "

  • 结果,我们最终得到了 peculiar-looking "3""9"

我们可以通过设置 doublequote=False 来关闭字符串包装在 "" 中的行为,然后提供 escapechar 参数:

print(df.to_csv(doublequote=False, escapechar="@"))



,A,B
a,3@"9,5
b,4,6

此处,需要 escapechar,因为单独的 "39 是无效语法 - " 表示字符串的开头,并且没有结束 "escapechar的作用是表明"与字符串完全无关。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | to_csv method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。