Python pandas常用函数详解


Posted in Python onFebruary 07, 2018

本文研究的主要是pandas常用函数,具体介绍如下。

1 import语句

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import re

2 文件读取

df = pd.read_csv(path='file.csv')
参数:header=None 用默认列名,0,1,2,3...
names=['A', 'B', 'C'...] 自定义列名
index_col='A'|['A', 'B'...] 给索引列指定名称,如果是多重索引,可以传list
skiprows=[0,1,2] 需要跳过的行号,从文件头0开始,skip_footer从文件尾开始
nrows=N 需要读取的行数,前N行
chunksize=M 返回迭代类型TextFileReader,每M条迭代一次,数据占用较大内存时使用
sep=':'数据分隔默认是',',根据文件选择合适的分隔符,如果不指定参数,会自动解析
skip_blank_lines=False 默认为True,跳过空行,如果选择不跳过,会填充NaN
converters={'col1', func} 对选定列使用函数func转换,通常表示编号的列会使用(避免转换成int)

dfjs = pd.read_json('file.json') 可以传入json格式字符串
dfex = pd.read_excel('file.xls', sheetname=[0,1..]) 读取多个sheet页,返回多个df的字典

3 数据预处理

df.duplicated() 返回各行是否是上一行的重复行
df.drop_duplicates() 删除重复行,如果需要按照列过滤,参数选填['col1', 'col2',...]
df.fillna(0) 用实数0填充na
df.dropna() axis=0|1 0-index 1-column
how='all'|'any' all-全部是NA才删 any-只要有NA就全删
del df['col1'] 直接删除某一列
df.drop(['col1',...], aixs=1) 删除指定列,也可以删除行
df.column = col_lst 重新制定列名
df.rename(index={'row1':'A'}, 重命名索引名和列名
columns={'col1':'A1'})
df.replace(dict) 替换df值,前后值可以用字典表,{1:‘A', '2':'B'}

def get_digits(str):
m = re.match(r'(\d+(\.\d+)?)', str.decode('utf-8'))
if m is not None:
return float(m.groups()[0])
else:
return 0
df.apply(get_digits) DataFrame.apply,只获取小数部分,可以选定某一列或行
df['col1'].map(func) Series.map,只对列进行函数转换

pd.merge(df1, df2, on='col1',
how='inner',sort=True) 合并两个DataFrame,按照共有的某列做内连接(交集),outter为外连接(并集),结果排序

pd.merge(df1, df2, left_on='col1',
right_on='col2') df1 df2没有公共列名,所以合并需指定两边的参考列

pd.concat([sr1, sr2, sr3,...], axis=0) 多个Series堆叠成多行,结果仍然是一个Series
pd.concat([sr1, sr2, sr3,...], axis=1) 多个Series组合成多行多列,结果是一个DataFrame,索引取并集,没有交集的位置填入缺省值NaN

df1.combine_first(df2) 用df2的数据补充df1的缺省值NaN,如果df2有更多行,也一并补上

df.stack() 列旋转成行,也就是列名变为索引名,原索引变成多层索引,结果是具有多层索引的Series,实际上是把数据集拉长

df.unstack() 将含有多层索引的Series转换为DataFrame,实际上是把数据集压扁,如果某一列具有较少类别,那么把这些类别拉出来作为列
df.pivot() 实际上是unstack的应用,把数据集压扁

pd.get_dummies(df['col1'], prefix='key') 某列含有有限个值,且这些值一般是字符串,例如国家,借鉴位图的思想,可以把k个国家这一列量化成k列,每列用0、1表示

4 数据筛选

df.columns 列名,返回Index类型的列的集合
df.index 索引名,返回Index类型的索引的集合
df.shape 返回tuple,行x列
df.head(n=N) 返回前N条
df.tail(n=M) 返回后M条
df.values 值的二维数组,以numpy.ndarray对象返回
df.index DataFrame的索引,索引不可以直接赋值修改
df.reindex(index=['row1', 'row2',...]
columns=['col1', 'col2',...]) 根据新索引重新排序
df[m:n] 切片,选取m~n-1行
df[df['col1'] > 1] 选取满足条件的行
df.query('col1 > 1') 选取满足条件的行
df.query('col1==[v1,v2,...]')
df.ix[:,'col1'] 选取某一列
df.ix['row1', 'col2'] 选取某一元素
df.ix[:,:'col2'] 切片选取某一列之前(包括col2)的所有列
df.loc[m:n] 获取从m~n行(推荐)
df.iloc[m:n] 获取从m~n-1行
df.loc[m:n-1,'col1':'coln'] 获取从m~n行的col1~coln列

sr=df['col'] 取某一列,返回Series
sr.values Series的值,以numpy.ndarray对象返回
sr.index Series的索引,以index对象返回

5 数据运算与排序

df.T DataFrame转置
df1 + df2 按照索引和列相加,得到并集,NaN填充
df1.add(df2, fill_value=0) 用其他值填充
df1.add/sub//mul/div 四则运算的方法
df - sr DataFrame的所有行同时减去Series
df * N 所有元素乘以N
df.add(sr, axis=0) DataFrame的所有列同时减去Series

sr.order() Series升序排列
df.sort_index(aixs=0, ascending=True) 按行索引升序
df.sort_index(by=['col1', 'col2'...]) 按指定列优先排序
df.rank() 计算排名rank值

6 数学统计

sr.unique Series去重
sr.value_counts() Series统计频率,并从大到小排序,DataFrame没有这个方法
sr.describe() 返回基本统计量和分位数

df.describe() 按各列返回基本统计量和分位数
df.count() 求非NA值得数量
df.max() 求最大值
df.min() 求最大值
df.sum(axis=0) 按各列求和
df.mean() 按各列求平均值
df.median() 求中位数
df.var() 求方差
df.std() 求标准差
df.mad() 根据平均值计算平均绝对利差
df.cumsum() 求累计和
sr1.corr(sr2) 求相关系数
df.cov() 求协方差矩阵
df1.corrwith(df2) 求相关系数

pd.cut(array1, bins) 求一维数据的区间分布
pd.qcut(array1, 4) 按指定分位数进行区间划分,4可以替换成自定义的分位数列表

df['col1'].groupby(df['col2']) 列1按照列2分组,即列2作为key
df.groupby('col1') DataFrame按照列1分组
grouped.aggreagte(func) 分组后根据传入函数来聚合
grouped.aggregate([f1, f2,...]) 根据多个函数聚合,表现成多列,函数名为列名
grouped.aggregate([('f1_name', f1), ('f2_name', f2)]) 重命名聚合后的列名
grouped.aggregate({'col1':f1, 'col2':f2,...}) 对不同的列应用不同函数的聚合,函数也可以是多个

df.pivot_table(['col1', 'col2'],
rows=['row1', 'row2'],
aggfunc=[np.mean, np.sum]
fill_value=0,
margins=True) 根据row1, row2对col1, col2做分组聚合,聚合方法可以指定多种,并用指定值替换缺省值

pd.crosstab(df['col1'], df['col2']) 交叉表,计算分组的频率

总结

以上就是本文关于Python pandas常用函数详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python正则表达式抓取成语网站
Nov 20 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
深入讲解Java编程中类的生命周期
Feb 05 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
python基础教程项目四之新闻聚合
Apr 02 Python
深入分析python中整型不会溢出问题
Jun 18 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
tensorflow自定义激活函数实例
Feb 04 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
详解python字节码
Feb 07 #Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 #Python
python深度优先搜索和广度优先搜索
Feb 07 #Python
Python Flask基础教程示例代码
Feb 07 #Python
Python装饰器用法实例总结
Feb 07 #Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 #Python
Python自定义线程池实现方法分析
Feb 07 #Python
You might like
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python写的一个squid访问日志分析的小程序
2014/09/17 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
电子商务应届生自我鉴定
2014/01/13 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
Nginx四层负载均衡的配置指南
2021/06/11 Servers
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang