2.2 输出数据 2.2 Pandas 数据输出详解 2.2.1 输出到 CSV 文件 CSV (Comma Separated Values) 是一种常用的文本文件格式,用于存储表格数据。Pandas 提供了 方法将 DataFrame 或 Series 输出到 CSV 文件。 语法: 常用参数: : 文件路径或缓冲区。如果为 None,则返回字符串。 : 分隔符,默认为逗号 ( )。 : 用于表示缺失值的字符串,默认为空字符串 ( )。 : 浮点数的格式化字符串。 : 要写入的列的列表。 : 是否写入列名,默认为 True。 : 是否写入索引,默认为 True。 : 索引列的标签。 : 文件打开模式,默认为 (写入)。 : 文件编码,例如 。 : 压缩类型,例如 、 、 。
CSV (Comma Separated Values) 是一种常用的文本文件格式,用于存储表格数据。Pandas 提供了 to_csv() 方法将 DataFrame 或 Series 输出到 CSV 文件。
语法:
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', lineterminator=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict', storage_options=None)
常用参数:
path_or_buf: 文件路径或缓冲区。如果为 None,则返回字符串。
sep: 分隔符,默认为逗号 (,)。
na_rep: 用于表示缺失值的字符串,默认为空字符串 ('')。
float_format: 浮点数的格式化字符串。
columns: 要写入的列的列表。
header: 是否写入列名,默认为 True。
index: 是否写入索引,默认为 True。
index_label: 索引列的标签。
mode: 文件打开模式,默认为 'w' (写入)。
encoding: 文件编码,例如 'utf-8'。
compression: 压缩类型,例如 'gzip'、'bz2'、'xz'。
代码示例:
import pandas as pd # 创建一个 DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 输出到 CSV 文件 df.to_csv('output.csv', index=False, encoding='utf-8') # 输出到 CSV 文件,使用分号作为分隔符 df.to_csv('output_semicolon.csv', sep=';', index=False, encoding='utf-8') # 输出到 CSV 文件,只包含姓名和年龄两列 df.to_csv('output_selected_columns.csv', columns=['姓名', '年龄'], index=False, encoding='utf-8') # 输出到 CSV 文件,使用 gzip 压缩 df.to_csv('output_compressed.csv.gz', index=False, encoding='utf-8', compression='gzip')
代码解释:
第一个示例将 DataFrame df 输出到名为 output.csv 的文件中,不包含索引列,并使用 UTF-8 编码。
第二个示例使用分号 (;) 作为分隔符。
第三个示例只输出了 姓名 和 年龄 两列。
第四个示例将文件压缩为 gzip 格式。
Pandas 提供了 to_excel() 方法将 DataFrame 输出到 Excel 文件。需要安装 openpyxl 或 xlsxwriter 库。
语法:
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None, storage_options=None)
常用参数:
excel_writer: 文件路径或 ExcelWriter 对象。
sheet_name: 工作表名称,默认为 'Sheet1'。
na_rep: 用于表示缺失值的字符串,默认为空字符串 ('')。
float_format: 浮点数的格式化字符串。
columns: 要写入的列的列表。
header: 是否写入列名,默认为 True。
index: 是否写入索引,默认为 True。
index_label: 索引列的标签。
startrow: 起始行,默认为 0。
startcol: 起始列,默认为 0。
engine: 使用的引擎,可以是 'openpyxl' 或 'xlsxwriter'。
代码示例:
import pandas as pd # 创建一个 DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 输出到 Excel 文件 df.to_excel('output.xlsx', sheet_name='人员信息', index=False) # 输出到 Excel 文件,指定起始行和起始列 df.to_excel('output_position.xlsx', sheet_name='人员信息', index=False, startrow=2, startcol=1) # 使用 ExcelWriter 对象输出到多个工作表 with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer: df.to_excel(writer, sheet_name='人员信息', index=False) df.describe().to_excel(writer, sheet_name='统计信息')
代码解释:
第一个示例将 DataFrame df 输出到名为 output.xlsx 的文件中,工作表名称为 '人员信息',不包含索引列。
第二个示例指定了起始行和起始列,数据将从第 3 行第 2 列开始写入。
第三个示例使用 ExcelWriter 对象将多个 DataFrame 输出到同一个 Excel 文件的不同工作表中。
Pandas 提供了 to_json() 方法将 DataFrame 或 Series 输出到 JSON (JavaScript Object Notation) 文件。
语法:
DataFrame.to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=True, indent=None, storage_options=None)
常用参数:
path_or_buf: 文件路径或缓冲区。如果为 None,则返回字符串。
orient: JSON 字符串的格式,可以是 'split'、'records'、'index'、'columns'、'values'、'table'。
date_format: 日期格式,可以是 'epoch' (Unix 时间戳) 或 'iso' (ISO 8601 格式)。
date_unit: 时间戳的单位,可以是 's'、'ms'、'us'、'ns'。
lines: 是否将每行数据作为独立的 JSON 对象输出,默认为 False。
indent: 缩进空格数。
代码示例:
import pandas as pd # 创建一个 DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 输出到 JSON 文件,使用 records 格式 df.to_json('output.json', orient='records', force_ascii=False) # 输出到 JSON 文件,使用 index 格式,并添加缩进 df.to_json('output_index.json', orient='index', indent=4, force_ascii=False) # 输出到 JSON 文件,每行作为一个 JSON 对象 df.to_json('output_lines.json', orient='records', lines=True, force_ascii=False)
代码解释:
第一个示例将 DataFrame df 输出到名为 output.json 的文件中,使用 'records' 格式,即将每行数据作为一个 JSON 对象。force_ascii=False 保证中文不被转义。
第二个示例使用 'index' 格式,并将索引作为 JSON 对象的键,添加了 4 个空格的缩进。
第三个示例使用 'records' 格式,并将 lines 参数设置为 True,将每行数据作为一个独立的 JSON 对象输出。
Pandas 提供了 to_html() 方法将 DataFrame 输出到 HTML 文件。
语法:
DataFrame.to_html(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, max_rows=None, max_cols=None, show_dimensions=False, decimal='.', bold_rows=True, classes=None, escape=True, notebook=False, border=None, table_id=None, render_links=False, storage_options=None)
常用参数:
buf: 文件路径或缓冲区。如果为 None,则返回字符串。
columns: 要写入的列的列表。
header: 是否写入列名,默认为 True。
index: 是否写入索引,默认为 True。
na_rep: 用于表示缺失值的字符串,默认为 'NaN'。
classes: CSS 类名。
代码示例:
import pandas as pd # 创建一个 DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 输出到 HTML 文件 df.to_html('output.html', index=False) # 输出到 HTML 文件,并添加 CSS 类名 df.to_html('output_styled.html', index=False, classes='styled-table')
代码解释:
第一个示例将 DataFrame df 输出到名为 output.html 的文件中,不包含索引列。
第二个示例添加了 CSS 类名 styled-table,可以自定义表格的样式。
Pandas 提供了 to_sql() 方法将 DataFrame 输出到 SQL 数据库。需要安装相应的数据库驱动程序,例如 sqlalchemy。
语法:
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)
常用参数:
name: 表名。
con: 数据库连接对象或连接字符串。
if_exists: 如果表已存在,该如何处理。可以是 'fail' (默认)、'replace' (删除表并创建新表) 或 'append' (将数据追加到表)。
index: 是否将索引作为列写入,默认为 True。
index_label: 索引列的标签。
dtype: 列的数据类型。
代码示例:
import pandas as pd from sqlalchemy import create_engine # 创建一个 DataFrame data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) # 创建一个 SQLite 数据库连接 engine = create_engine('sqlite:///output.db') # 输出到 SQL 数据库 df.to_sql('人员信息', engine, if_exists='replace', index=False)
代码解释:
首先,创建了一个 SQLite 数据库连接。
然后,将 DataFrame df 输出到名为 人员信息 的表中,如果表已存在,则删除表并创建新表,不包含索引列。
除了上述常用的输出方法外,Pandas 还提供了其他一些输出方法,例如:
to_latex(): 输出到 LaTeX 格式。
to_markdown(): 输出到 Markdown 格式。
to_string(): 输出到字符串。
to_clipboard(): 输出到剪贴板。
以下是一个使用 Mermaid 绘制的数据输出流程图:
流程图解释:
从 DataFrame 或 Series 对象开始。
选择要输出的数据格式,例如 CSV、Excel、JSON、HTML 或 SQL。
根据选择的格式,调用相应的 to_ 方法,例如 to_csv()、to_excel()、to_json()、to_html() 或 to_sql()。
将数据输出到相应的文件或数据库。
在输出数据时,需要注意文件编码,特别是当数据包含中文等非 ASCII 字符时。
根据不同的输出格式,可能需要安装额外的库,例如 openpyxl、xlsxwriter、sqlalchemy 等。
在输出到 SQL 数据库时,需要确保数据库连接配置正确,并且具有相应的权限。
Pandas 提供了丰富的输出方法,可以将 DataFrame 或 Series 对象输出到不同的文件格式或数据存储。通过灵活使用这些方法,可以方便地将数据导出到其他应用程序或系统中使用。理解各种输出方法的参数和用法,可以更好地控制数据的输出格式和内容。