写这篇文章,主要是想按照一定的逻辑顺总结一下自己做项目以来,序用到过的pandas的知识点.
虽然pandas官方文档上各个方面都写的很清楚,但是还是想自己再写一份,一个是想作为个人梳理,另外也可以把最经常使用的部分拎出来,更清晰一些.
不定时更新.
数据的IO
MySQL
1.读mysq数据
df = pd.read_sql(sql, db.conn)
其中sql是需要的sql语句,db是创建的数据库连接对象.
一般来说,这样基本就能满足需求.
额外的参数
1. chunksize : int, default None
当数据量比较大,或者想将读入的数据分割成指定行数的一个个block,则可以设置这个参数.其会返回一个迭代器,迭代器中的元素为chunksize行数的记录.
2. index_col : string or list of strings, optional, default: None
可以设置某些列为索引列.
2.写mysql数据
engine = create_engine('mysql+pymysql://root:password@localhost/schemeName', echo=False)
df.to_sql(tablename, engine, if_exists='append', index=index)
将df的数据写入到数据库表中.pandas文档中提供的例子是SQlite的数据库,所以不能直接用db.conn去充当engine.
参数说明
1. if_exists: {‘fail’, ‘replace’, ‘append’}, default ‘fail’
当数据库中存在要写入的table时,三种处理方式
fail:那么写入失败
replace:把原来的table删掉,写入新的
append:在原来的table上,添加新的记录
2. index : boolean, default True
当设为True时,会把df的index当成一列写入数据库.
csv
1.读数据
df = pd.read_csv(path + filename, header=None, names=[name1, name2])
参数说明
1.header: int or list of ints, default ‘infer’
用来指定行号作为数据的开始和列的名称.header设为None是告诉其打开的文件里没有列名.如果打开的文件有列名的时候,可以不设置这一项,这样系统会自动推测出列名.
2.names : array-like, default None
显示地指定列的名称.当header是None的时候,需要加上这个.
关于这个函数,可设置的参数还比较多,不过目前使用的也就这几个,所以先不描述其他了.
2.写数据
df.to_csv(path+filename, index=False, header=header, mode='a')
参数说明
1.index: boolean, default True
说明是否需要写入df的index.
2.header : boolean or list of string, default True
说明是否要把列名写入.也可以在这里重新设置写入的列名.
3.mode : str,default ‘w’
python的写入模式.
excel
直接创建dateFrame
数据的选择
简单选择
- 选择部分行
- 选择部分列
- 选择数值
按照条件进行筛选
- 单一条件筛选
- 多个条件筛选
数据的聚合值描述
数据的修改
索引信息的修改
数据的合并
- concat
- merge
- join
数据的可视化
时间序列相关
数据采样