Pandas to_csv()

Pandas 中的 to_csv() 方法用于写入 CSV 文件。

示例

import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'San Francisco', 'Los Angeles']
}

df = pd.DataFrame(data)

# use to_csv() to write df to a CSV file df.to_csv('sample_data.csv')
'' Output sample_data.csv: Name,Age,City Alice,25,New York Bob,30,San Francisco Charlie,35,Los Angeles ''

to_csv() 语法

Pandas 中 to_csv() 方法的语法是

df.to_csv(path_or_buf, sep=',', header=True, index=False, mode='w', encoding=None, quoting=None, line_terminator='\n')

to_csv() 参数

to_csv() 方法接受以下常用参数

  • path_or_buf (可选) - 表示 DataFrame 将被保存为 CSV 文件的路径或缓冲区对象
  • sep (可选) - 指定输出 CSV 文件中要使用的分隔符
  • header (可选) - 指示是否在输出 CSV 文件中包含标题行
  • index (可选) - 确定是否在输出 CSV 文件中包含索引列
  • mode (可选) - 指定打开输出文件的模式
  • encoding (可选) - 设置写入 CSV 文件时要使用的字符编码
  • quoting (可选) - 确定包含特殊字符的字段的引用行为
  • line_terminator (可选) - 指定用于终止输出 CSV 文件中行的字符序列

to_csv()返回值

to_csv() 的返回值可以是 none(当写入文件或类文件对象时),或者当未指定文件目标时,返回 DataFrame 的 CSV 格式字符串表示。


示例 1:写入 CSV 文件

import pandas as pd

# create dataframe
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'City': ['New York', 'London', 'Paris', 'Berlin']}
df = pd.DataFrame(data)

# use to_csv() to write to csv file df.to_csv(path_or_buf='output_path.csv')

在此示例中,我们使用 path_or_buf 参数在 to_csv() 方法中指定要写入的文件名,将 DataFrame 写入名为 output.csv 的 CSV 文件。

我们的 output.csv 将如下所示

,Name,Age,City
0,Tom,20,New York
1,Nick,21,London
2,John,19,Paris
3,Tom,18,Berlin

示例 2:在 CSV 文件中使用不同的分隔符

import pandas as pd

# create dataframe
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'City': ['New York', 'London', 'Paris', 'Berlin']}
df = pd.DataFrame(data)

# use to_csv() to write to csv file with semicolon as the delimiter # also exclude indices df.to_csv('output_with_semicolon.csv', sep=';', index=False)

在这里,我们在 to_csv() 中使用了 sep=';' 参数,将文件写入为以分号作为分隔符的 CSV 文件。

此外,我们使用了 index=False 来在写入 CSV 文件时排除索引。

我们的 output_with_semicolon.csv 将如下所示

Name;Age;City
Tom;20;New York
Nick;21;London
John;19;Paris
Tom;18;Berlin

示例 3:使用 header 参数控制列标题

import pandas as pd

# create dataframe
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
        'Age': [20, 21, 19, 18],
        'City': ['New York', 'London', 'Paris', 'Berlin']}
df = pd.DataFrame(data)

# use to_csv() to write to csv file and exclude headers df.to_csv('output_without_headers.csv', header=False)

在此,由于我们在 to_csv() 中使用了 header=False,因此列名 NameAgeCity 不会出现在输出文件中。

因此,我们的 output_without_headers.csv 将如下所示

0,Tom,20,New York
1,Nick,21,London
2,John,19,Paris
3,Tom,18,Berlin

示例 4:使用 Pandas 写入和追加 CSV 文件

在 Pandas 中,to_csv() 方法中的 mode 参数用于指定打开文件的模式。当

  • mode='w' (默认) - 写入模式。它将打开文件进行写入,并且任何具有相同名称的现有文件都将被覆盖。如果文件不存在,则会创建一个新文件。
  • mode='a' - 追加模式。它将打开文件进行写入,但如果文件已存在,数据将被追加到文件末尾。如果文件不存在,则会创建一个新文件。
  • mode='x' - 独占创建模式。如果文件已存在,操作将失败。

让我们看一个例子。

import pandas as pd

# create the first DataFrame
data1 = {
    'Name': ['Tom', 'Nick', 'John'],
    'Age': [20, 21, 19],
    'City': ['New York', 'London', 'Paris']
}
df1 = pd.DataFrame(data1)

# write the first DataFrame to the file with headers df1.to_csv('output.csv', mode='w', header=True, index=False)
# create the second DataFrame data2 = { 'Name': ['Anna', 'Elsa', 'Olaf'], 'Age': [25, 28, 5], 'City': ['Arendelle', 'Arendelle', 'Arendelle'] } df2 = pd.DataFrame(data2)
# append the second DataFrame to the same file without headers df2.to_csv('output.csv', mode='a', header=False, index=False)

在上面的示例中,我们创建了两个 DataFrame df1df2,每个 DataFrame 都包含三个人员的 NameAgeCity 列数据。

首先,我们将 df1 写入 output.csv,包含列标题且不带行索引。

然后,我们将 df2 追加到 output.csv,而不再添加标题,从而确保最终文件中包含连续的六个人员列表。

因此,我们的 output.csv 将如下所示

Name,Age,City
Tom,20,New York
Nick,21,London
John,19,Paris
Anna,25,Arendelle
Elsa,28,Arendelle
Olaf,5,Arendelle

示例 5:在写入 CSV 文件时控制引号

to_csv() 方法中的 quoting 参数控制 CSV 文件中值的引用行为。

quoting 参数可以取以下值之一

  • csv.QUOTE_MINIMAL (默认) - 仅在需要时引用 (例如,对于逗号或引号等特殊字符)
  • csv.QUOTE_ALL - 始终引用所有内容
  • csv.QUOTE_NONNUMERIC - 引用非数字值,保留数字值不引用
  • csv.QUOTE_NONE - 从不引用任何内容,确保特殊字符手动处理

让我们看一个例子。

import pandas as pd
import csv

data = {
    'Name': ['Tom', 'Anna,Smith', 'John"Doe'],
    'Age': [25, 30, 40]
}
df = pd.DataFrame(data)

# save with different quoting options df.to_csv('output_minimal.csv', quoting=csv.QUOTE_MINIMAL, index=False) df.to_csv('output_all.csv', quoting=csv.QUOTE_ALL, index=False) df.to_csv('output_nonnumeric.csv', quoting=csv.QUOTE_NONNUMERIC, index=False) df.to_csv('output_none.csv', quoting=csv.QUOTE_NONE, index=False, escapechar='\\')

在这里,当我们使用 quoting=csv.QUOTE_MINIMAL 时,只有 'Anna,Smith' 被引用,因为它包含逗号,这是默认分隔符。

所以我们的 output_minimal.csv 文件将如下所示

Name,Age
Tom,25
"Anna,Smith",30
John"Doe",40

而当我们使用 quoting=csv.QUOTE_ALL 时,所有值(包括标题)都被引用。请注意,'John"Doe' 中的双引号被另一个双引号转义。

因此,我们的 output_all.csv 文件将如下所示

"Name","Age"
"Tom","25"
"Anna,Smith","30"
"John""Doe","40"

同样,当我们使用 quoting=csv.QUOTE_NONNUMERIC 时,所有非数字字段都被引用。同样,'John"Doe' 中的双引号被另一个双引号转义,但年龄是数字,未被引用。

所以我们的 output_nonnumeric.csv 文件将如下所示

"Name",Age
"Tom",25
"Anna,Smith",30
"John""Doe",40

最后,当我们使用 quoting=csv.QUOTE_NONE 时,不引用任何值,但使用我们设置为反斜杠 \\ 的转义字符来转义特殊字符。

因此,我们的 output_none.csv 文件将如下所示

Name,Age
Tom,25
Anna\,Smith,30
John\"Doe,40

示例 6:使用 Pandas 自定义 CSV 行尾符

import pandas as pd

data = {
    'Name': ['Tom', 'Alice', 'Bob'],
    'Age': [25, 30, 35],
    'City': ['New York', 'San Francisco', 'Los Angeles']
}

df = pd.DataFrame(data)

# save with different line terminators df.to_csv('output_unix.csv', line_terminator='\n', index=False) df.to_csv('output_tilde.csv', line_terminator='~', index=False)

在这里,当我们使用 line_terminator='\n' 时,CSV 文件将如下所示

Name,Age,City
Tom,25,New York
Alice,30,San Francisco
Bob,35,Los Angeles

而当我们使用 line_terminator='~' 时,CSV 文件将如下所示

Name,Age,City~Tom,25,New York~Alice,30,San Francisco~Bob,35,Los Angeles~

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战