常用的数据存储介质是数据库和 CSV 文件, pandas 模块包含了相应的 API 对数据进行输入和输出:
对于 CSV 文件: read_csv(),to_csv()
对于 SQL 查询: read_sql,to_sql()
一, CSV 文件
CSV 文件把数据以逗号为字段分隔符, 回车换行为行分隔符, pandas 使用 read_csv() 函数来读取 CSV 文件, 以 to_csv() 函数把数据存储为 CSV.
1,read_csv()
read_csv() 函数的参数非常多,
- pandas.read_csv(filepath_or_buffer, sep=',', delim_whitespace=False,
- header='infer', names=None, index_col=None, usecols=None,...)
下面主要介绍最常用的参数:
filepath_or_buffer: 文件的路径
sep=',': 字段的分隔符, 默认值是逗号
header='infer': 字段名称所在的行号, 默认值是 infer, 表示推断列名, 推断列名的逻辑是: 如果 names 字段没有传递值, 那么 header='infer'等价于 header=0, 从文件的第一行中获取值作为列名; 如果 names 字段传递值, 那么 header='infer'等价于 header=None, 使用 names 参数传递的值作为列名.
names=None: 包含列名的列表, 列名不能重复.
index_col=None: 索引列的序号, 传递 index_col=False 强制 pandas 不要使用第一列作为索引 (row name)
usecols=None: 返回列的子集
2,to_csv()
to_csv() 函数用于把数据写入到 CSV 文件中
to_csv(path_or_buf,sep,na_rep=',',columns=None,header=True,index=True,...)
重要参数注释:
columns=None: 要输出的列, 默认值是 None, 输出所有的列
header=True: 是否输出列名, 默认值是 True
index=True: 是否输出行索引 (row names), 默认值是 True
二, SQL 查询
执行 SQL 查询, 把数据写入到 DataFrame 对象中
1,read_sql()
read_sql() 函数用于执行 SQL 查询, 把数据写入到 DateFrame 对象中:
- pandas.read_sql(sql, con, index_col=None, chunksize=None)
- pandas.read_sql_query(sql, con, index_col=None, chunksize=None)
参数注释:
sql:SQL 查询
con: 连接
index_col: 用于指定索引列的名称, 默认值是 None
- chunksize=None
- 2,to_sql()
把数据写入到数据库中的表中:
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, method=None)
参数注释:
name: 关系表的名称
con: 连接
schema=None: 指定数据库的架构, 例如, MySQL
if_exists='fail': 如果关系表存在, 当值为 fail 时, pandas 抛出错误; 当值为 replace 时, 删除旧表, 创建新表; 当值为 append 时, 向表中插入新的数据;
index=True: 把 DataFrame 的索引作为一列, 即索引列
index_label: 索引列的名称, 如果有多个索引列, 那么 index_label 是字符串的序列
chunksize: 每个 batch 的大小, 默认情况下, 一次性插入所有的数据行
method: 插入数据的方法, 默认值是 None, 一次插入一行; multi 是指一次插入多行数据,
举个例子, 从一个数据库中查询数据, 插入到 SQL Server 数据库中:
- import psycopg2
- import pandas as pd
- from sqlalchemy import create_engine
- con=psycopg2.connect(dbname= 'db_name', host='db_host', port= '5439', user= '', password='')
- engine=create_engine('mssql+pymssql://user:[email protected]/db_name?charset=utf8',echo=False)
- sql="""select ..."""
- data_frame = pd.read_sql(sql, con)
- data_frame.to_sql('out_table', con=engine, if_exists='append',index = False, schema='dbo')
参考文档:
Pandas IO Tools
SQLAlchemy 连接 SQLserver 数据库及常用的 DB 操作
来源: http://www.bubuko.com/infodetail-3099604.html