常用的数据存储介质是数据库和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:password@host/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操作