第二章:数据输入与输出 第二章:Pandas数据输入与输出 2.1 常用数据格式 Pandas支持读取和写入多种数据格式,包括: CSV (Comma Separated Values):逗号分隔值文件,是最常用的数据存储格式之一。 Excel: Microsoft Excel文件,Pandas可以读取和写入.xls和.xlsx格式的文件。 SQL Database: 通过SQLAlchemy库,Pandas可以连接各种SQL数据库,进行数据的读取和写入。 JSON (JavaScript Object Notation):一种轻量级的数据交换格式,常用于Web API。 HTML: Pandas可以解析HTML表格数据。
Pandas支持读取和写入多种数据格式,包括:
CSV (Comma Separated Values):逗号分隔值文件,是最常用的数据存储格式之一。
Excel: Microsoft Excel文件,Pandas可以读取和写入.xls和.xlsx格式的文件。
SQL Database: 通过SQLAlchemy库,Pandas可以连接各种SQL数据库,进行数据的读取和写入。
JSON (JavaScript Object Notation):一种轻量级的数据交换格式,常用于Web API。
HTML: Pandas可以解析HTML表格数据。
Pickle: Python对象序列化格式,用于存储Python对象。
Parquet: 列式存储格式,适用于大数据分析。
CSV文件是最常用的数据格式之一,Pandas提供了read_csv()函数用于读取CSV文件,to_csv()方法用于将DataFrame写入CSV文件。
import pandas as pd # 读取CSV文件 df = pd.read_csv('data.csv') # 假设当前目录下有名为data.csv的文件 print(df.head()) # 显示前几行数据
常用参数:
filepath_or_buffer: 文件路径或URL。
sep: 分隔符,默认为逗号(,)。
header: 指定哪一行作为列名,默认为0(第一行)。如果CSV文件没有列名,可以设置为None。
names: 自定义列名。
index_col: 指定哪一列作为索引列。
usecols: 指定读取哪些列。
dtype: 指定列的数据类型。
na_values: 指定哪些值被认为是缺失值。
skiprows: 跳过指定的行。
nrows: 读取指定的行数。
encoding: 指定文件编码,例如utf-8, gbk等。
示例:
# 读取CSV文件,指定分隔符、列名和索引列 df = pd.read_csv('data.csv', sep=';', names=['col1', 'col2', 'col3'], index_col='col1') print(df.head()) # 读取CSV文件,指定编码和缺失值 df = pd.read_csv('data.csv', encoding='gbk', na_values=['NA', 'NULL']) print(df.head())
# 将DataFrame写入CSV文件 df.to_csv('output.csv', index=False) # index=False 不写入索引列
常用参数:
path_or_buf: 文件路径。
sep: 分隔符,默认为逗号(,)。
na_rep: 缺失值表示,默认为空字符串。
float_format: 浮点数格式。
columns: 指定写入哪些列。
header: 是否写入列名,默认为True。
index: 是否写入索引,默认为True。
index_label: 索引列的列名。
encoding: 指定文件编码。
示例:
# 将DataFrame写入CSV文件,指定分隔符和编码 df.to_csv('output.csv', sep=';', encoding='utf-8') # 将DataFrame写入CSV文件,只写入指定的列 df.to_csv('output.csv', columns=['col1', 'col2'])
Pandas提供了read_excel()函数用于读取Excel文件,to_excel()方法用于将DataFrame写入Excel文件。 需要安装 openpyxl 或 xlrd 库来支持 Excel 文件的读写。
pip install openpyxl # 或 pip install xlrd
# 读取Excel文件 df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 默认读取第一个sheet print(df.head())
常用参数:
io: 文件路径或文件对象。
sheet_name: 指定要读取的sheet,可以是sheet名或sheet索引(从0开始)。
header: 指定哪一行作为列名,默认为0。
names: 自定义列名。
index_col: 指定哪一列作为索引列。
usecols: 指定读取哪些列。
dtype: 指定列的数据类型。
na_values: 指定哪些值被认为是缺失值。
skiprows: 跳过指定的行。
nrows: 读取指定的行数。
示例:
# 读取Excel文件,指定sheet名和索引列 df = pd.read_excel('data.xlsx', sheet_name='Sheet2', index_col='ID') print(df.head()) # 读取Excel文件,只读取指定的列 df = pd.read_excel('data.xlsx', usecols=['A', 'C', 'E']) print(df.head())
# 将DataFrame写入Excel文件 df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
常用参数:
excel_writer: 文件路径或ExcelWriter对象。
sheet_name: 指定sheet名。
na_rep: 缺失值表示。
float_format: 浮点数格式。
columns: 指定写入哪些列。
header: 是否写入列名,默认为True。
index: 是否写入索引,默认为True。
index_label: 索引列的列名。
startrow: 起始行,默认为0。
startcol: 起始列,默认为0。
示例:
# 将DataFrame写入Excel文件,指定sheet名和不写入索引 df.to_excel('output.xlsx', sheet_name='Results', index=False) # 将多个DataFrame写入同一个Excel文件的不同sheet with pd.ExcelWriter('output.xlsx') as writer: df1.to_excel(writer, sheet_name='Sheet1', index=False) df2.to_excel(writer, sheet_name='Sheet2', index=False)
Pandas可以通过SQLAlchemy库连接各种SQL数据库,进行数据的读取和写入。
from sqlalchemy import create_engine # 创建数据库连接 engine = create_engine('sqlite:///data.db') # 连接到SQLite数据库 # 读取SQL数据 df = pd.read_sql('SELECT * FROM my_table', engine) print(df.head())
常用参数:
sql: SQL查询语句或表名。
con: 数据库连接。
index_col: 指定哪一列作为索引列。
coerce_float: 尝试将非字符串列转换为浮点数。
params: SQL查询的参数。
chunksize: 每次读取的行数,用于处理大型数据集。
示例:
# 读取SQL数据,指定索引列 df = pd.read_sql('SELECT * FROM my_table', engine, index_col='id') print(df.head()) # 使用参数化查询 query = "SELECT * FROM my_table WHERE column1 = :value" df = pd.read_sql(query, engine, params={'value': 'some_value'}) print(df.head())
# 将DataFrame写入SQL数据库 df.to_sql('my_table', engine, if_exists='replace', index=False)
常用参数:
name: 表名。
con: 数据库连接。
if_exists: 如果表存在,如何处理:
'fail': 抛出ValueError异常。
'replace': 删除表并创建新表。
'append': 将数据追加到现有表。
index: 是否写入索引,默认为True。
index_label: 索引列的列名。
chunksize: 每次写入的行数。
dtype: 指定列的数据类型。
示例:
# 将DataFrame写入SQL数据库,如果表存在则追加数据 df.to_sql('my_table', engine, if_exists='append', index=False) # 指定列的数据类型 from sqlalchemy import types dtype_dict = {'column1': types.VARCHAR(255), 'column2': types.INTEGER()} df.to_sql('my_table', engine, if_exists='replace', index=False, dtype=dtype_dict)
Pandas提供了read_json()函数用于读取JSON文件,to_json()方法用于将DataFrame写入JSON文件。
# 读取JSON文件 df = pd.read_json('data.json') print(df.head())
常用参数:
path_or_buf: 文件路径或URL。
orient: JSON结构类型:
'split': dict like {'index' -> [index], 'columns' -> [columns], 'data' -> [values]}
'records': list like [{column -> value}, ... , {column -> value}]
'index': dict like {index -> {column -> value}}
'columns': dict like {column -> {index -> value}}
'values': just the values array
'table': dict like {'schema': {schema}, 'data': {data}}
typ: 返回对象类型 (Series or DataFrame), 默认为 'frame'
dtype: 指定列的数据类型。
示例:
# 读取JSON文件,指定orient df = pd.read_json('data.json', orient='records') print(df.head())
# 将DataFrame写入JSON文件 df.to_json('output.json', orient='records')
常用参数:
path_or_buf: 文件路径。
orient: JSON结构类型,同read_json()。
date_format: 日期格式:
'epoch': epoch timestamp
'iso': ISO8601
double_precision: 浮点数精度。
force_ascii: 是否强制使用ASCII编码。
date_unit: 日期单位 (e.g. 's', 'ms', 'us', 'ns')
default_handler: 用于处理无法转换为JSON的对象的函数。
示例:
# 将DataFrame写入JSON文件,指定orient和日期格式 df.to_json('output.json', orient='index', date_format='iso')
除了以上常用的数据格式,Pandas还支持读取和写入其他数据格式,例如HTML, Pickle, Parquet等。具体使用方法可以参考Pandas官方文档。
Pandas提供了丰富的数据输入输出功能,可以方便地读取和写入各种数据格式。熟练掌握这些方法,可以大大提高数据分析的效率。 在实际应用中,需要根据数据的具体格式和需求,选择合适的函数和参数。 同时,需要注意数据编码、缺失值处理等问题,保证数据的准确性和完整性。
希望这篇文章能够帮助你更好地理解和使用Pandas的数据输入输出功能。