- pandas 名字的全称是 panel data analysis,用于Pyton的表格数据分析+可视化:
- 基于NumPy+matplotlib创建;
- Python数据处理的核心包;
- 功能可对标Excel及R语言的Tidyverse;
- 也和SQL/Stata/SAS等软件有大量重叠的数据处理功能;
- 知识点比较零碎,学习门槛较高;
- 开源、免费、灵活、高效;
- 某些功能还不够完善,但一直保持快速迭代。
Btw,本文所参考的是 pandas 的开发者 Wes McKinney大神的作品《利用Python进行数据分析》——pandas最重要的参考书籍,没有之一(书的链接在文末)。
先整理下Pandas的逻辑运算符号。
逻辑运算含义~not,取否&and|or^xordf.any()anydf.all()all<, >, ==,!=小于,大于,等于,不等于<=, >=小于或等于,大于或等于pd.isnull(obj)评断某列中的元素是否为空值pd.isnotnull(obj)评断某列中的元素是否非空
加速 pandas 的运算
- 导入数据:;特别地,导入Stata数据并打印变量+对应标签(label)的列表:;
- 导出数据:;
- 设置完整输出结果:;;
- df的转置:;
- df的列堆叠:;
- 快速虚构一个 4x5 的数据框:, ;
- 快速虚构一个 2x2 的数据框:;
- df 的去重:,指定删除姓名列重复的值,并保留第一个样本;
- Series 的去重:,保留唯一的取值;
- df的随机抽样,n个:;
- df的随机抽样,;
- Series的随机抽样,n个:;
- Series的随机抽样,30%:;
- 转换为 NumPy 数据:;
- 1. 将汇总数据 (透视表),转换为比例(归一化):
; - 2. 独热编码 OneHot Coder:
0.2 多个 Excel 文档快速合并
- 查看序列 Series 的 name:;
- 查看序列的 index:;
- 查看序列的 index 的 name:;
- 查看序列的前6个元素:;
- 查看序列的倒数第5个到最后1个,即最后5个元素:;
- 查看数据框的行数:;
- 查看数据框的行数和列数 - shape:;
- 查看数据框的大小:;
- 查看数据框的概要信息:,返回的是 shape,各列的非缺失值个数、数据类型;
- 查看各变量的数据类型:;
- 查看df的表格内容:;
- 查看df的各个列名称:;
- 重命名列:;
- 提取列:,提取3列;
- 选定某列:
- 根据正则表达式,选取名称符合条件的部分列: ;
- 查看全部变量的描述性统计:;
- 查看某个数字型变量的描述性统计: ;
- df['name'].describe() ,查看某个字符型变量的描述,包括count、unique、top(第一行取值)、freq(第一行取值的频数)、name(变量名称)、dtype(数据类型);
- 查看所有的列名称: ;
- 查看数据的头n条记录:;
- 查看变量A的前n个取值: ;
- 查看头5条数据,A和B两个变量:;
- 查看第一行: ;
- 查看1- 5行:,相当于;
- 查看第1行、和第1-3列交叉的数据: ,基于数据切片;
- 筛选某行数据: ,输出“id==1200”所在的行;
- 查看某个变量的均值:;
- 排序: ,整个数据集基于price变量升序排序之后,对price变量转换为整形之后进行描述性统计
- 排序,基于index:;
- 查看各个列的索引(index, 方便用作iloc)和名称:
最常用的变量(列)描述性统计指标,通常包括(和上面的部分重复):
- 查看行数:;
- 变量取值的统计: ;
- 查看变量的可能取值:,返回的信息比更少,但返回的是列表方便引用;
- 查看各变量的统计情况:;
- 查看某个变量的统计情况:,字符型变量和数值型变量的返回结果不同;
- 查看某个对象的和:;
- 查看某个对象的最小值:df;
- 查看某个对象的最大值:;
- 查看某个对象的标准差:;
- 查看某个对象的均值:;
- 查看某个对象的中位数:;
- 查看某个对象的IQR:;
排序
- 基于某个变量进行排序:;
- 基于某两个变量进行排序: ;
- 基于某个变量进行降序排序:;
- 序列基于索引进行排序:;
- 返回某列的元素的排名:;
- 返回某些列最大值,所在行的索引:,最小值min类似;
- 返回索引的值:;
- 检查索引值是否唯一:;
- 查看索引的数据类型:;
- 查看索引的名称:;
- 查看df的列名称(列索引):;
- 重命名列的名称:,这里假设原有3列;
- 重命名列的名称:;
- 索引的重置:,重新使用默认索引,把原来的索引当成新的一列,则直接删除行索引;
多层索引,multi-index:除了平时我们常用的行、列索引之外,pandas还拥有“多层索引”,这是一般其它统计工具都没有的特性。多层索引在形式上和 groupby对象/数据透视表的行、列分类变量类似,事实上数据透视表的索引就是多层索引。
- 多层列索引的引用:,或者,多层行索引可使用;
- 多层索引的查看:,;
- 整体查看变量的缺失概况:;
- 整体查看变量的缺失概况:, ;
- 删除包括缺失值的样本:;
- 删除包含缺失值的行:;
- 删除某个变量包含缺失值的行:,删除姓名为空的所有样本。或者;
- 删除某两列中有缺失值的行: ;
- 删除包含缺失值的列:;
- 找出带有缺失值的行:(?);
- 转换某列的数据类型:;
- 获取某列中非缺失的值:,返回的是一个列表(name这一列);
- 缺失值的填充:;
- 找出某一列有缺失的观测值:;
- 字符型/分类变量计数:;
- 将缺失值填充为“0”:;
- 某列的均值替代:;
- 显示存在缺失值的行:df[df.isnull().T.any()];
- 删除存在缺失值的行:df.dropna(axis=0, how='any') ;
- 删除存在缺失值的列:df.dropna(axis=1, how='any') ;
重复值:
- 1. 查看id重复的所有样本:;
- 筛选某些列,基于列名+正则表达式:,选出列名开头为 Sepal 的列;
- 选择其中是数值型的列:;
- 选择符合某个条件的观测值行:,选出成年人样本;
- 选择符合某个条件的观测值行,并显示某些列:,选出成年的所有行,并显示姓名+性别列;
- 选择某两列:,loc 是最灵活的检索方式;
- 选择某个元素,并输出索引:,选择行索引名称为1且列索引名称为a的那个元素;
- 选择某些行:,选择姓名是 Curry 的那一行数据;
- 选择某些行+某些列:;
- 选择多行:,选择第2、4行;iloc可以用默认的整数形式的索引;
- 选择某个元素,并输出索引:,选择第2行和第2列交叉的那个元素;
- 选择某个元素,不输出索引:; 选择第2行和第2列交叉的那个元素——这里加上="new_value",就可以修改某个cell的取值了;
- 检索符合某个条件值的多行:;
- 删除符合条件的多行:;
- 检索符合某个条件值的多行:,删除用“!=”;
- 删除某些行,比如删除那些['编码']中,不包含'2021'的行:,这里假设编码处于 2-5 位,比如“Y2021”;
- 切片,选择行索引为“0-1-2”共3行:;
- 取出两列并重命名,构成新的数据框:取出两列,重命名为age和income; pd.DataFrame({"age": "df.a", "income": "df.i"});
(df.a==1).describe()
查询函数:
- 输出符合A列大于B列条件的所有行:,等价于;
,基于索引名称的正则表达式的筛选函数:
- 查询列索引中名称末尾字母为e的列:,这regex是正则表达式参数;
- 将变量类型转化为浮点型:;
- 将变量转换为字符型:;
- 将变量类型转化为: ;
- 将变量类型转化为数值型:,coerce 强制转换;
- 查看变量的各种可能取值(列表):;
- 查看唯一取值的个数:,=;
- 新建一列,为两个数值型列的加总:;
- 新建一列,为两个数值型列进行加总:;
- 某列的取值的分类:df.age.cut(3, labels=['少年组', '中年组', '老年组']),把变量年龄平均切割为三组,构造分类变量;
- 把某列中取值为0的值,全部替换为nan: -- 这个写法真的比Stata的 if 帅气很多啊~!
- 如果国家这一列取值是 England,那么 region 那一列取值为'U.K.':df.region[df.country=='England'] = "U.K.";
- 修改某个单元格的取值:,这让我回想起Stata中数据的修改——;
- 根据年龄大小,而生成年龄段的分类:df_a['ageCat'][df_a.age<13 ] = 'child'; df_a['ageCat'][df_a.age.between(13, 19)] = 'teenager';
- 截取字符列,构造一个新列:df['n'] = da['A'].str(0:2);
- 简单地新建一列:,新建一个叫 age 的列,全部取值为10;
- 手工输入一列:;
- 手动输入一行:;
- 数值列的运算:;
- 数值列的运算:;
- 字符型列的拼接:;
- 删除行:,删除行索引名称为1的行; df.drop([0, 1], axis=0), 删除前两行;
- 删除某些符合条件的行:df.drop(df.loc[df['name'] == '王几行'].index, axis=0),删除姓名为“王几行”的所有样本值;
- 删除列:; ;
- 删除b那一列:;
- 删除某几列:;
- 删除第1和第2行:df.drop([0, 1]),默认的行索引;
- 删除性名列同时删除前两行:df.drop(columns='Name', index=[0,1])
- 转换为时间类型:;
- 求时间间隔 delta:df;
- 把时间变量设置为索引:;
- 咱们这里先看下相反的情况,连续变量向分类变量进行转变:
2. 分类变量转换为哑变量: one-hot 独热编码
解决中文乱码问题(基于 matplotlib画图):
同时画两个子图(来自Harvard CS109):
相关关系矩阵热图:
面板数据中的单变量画图,条形图/饼图:
- 单变量画图,直方图:;
- 双变量画图,散点图:;
sort_values() 再画频数图 (seaborn):
更完整的画法 (seaborn) :

更多画图的知识细节,可参考以下几篇文章:
- 的画法共有几种?
- 简单地merge两个df:;
- 纵向合并3个df:,concat 是“暴力拼接”,不去重;
- 横向合并3个df:,concat 是“暴力拼接”,不去重;
- append,只有纵向合并:;
- 分组统计 groupby:;
- 通过 concat 自我复制 3 倍: ,或者,, ,,, ;
- 正则表达式 re 的检查:n, 附带有一个cheatsheet;
- 某个对象(列)截取部分字符,并应用匿名函数:df,比如;
- 提取姓名列的最后一个字母:;
- 将某一列转换为整数:;
- 打印Stata数据中的变量标签(variable label):;
- 精确复制剪贴板的内容:,比如选中了一个带表头的表格,读取的时候会自动设置表头;
- 横向合并两个df:;
- 分组统计后筛选方法1:
分组统计后筛选方法2:nlargest(10)
10. 用匿名函数进行批量重命名列:, df.columns 查看结果;
11. apply + lambda,构造透视表的行索引

- df.groupby(by='Gender')['Age'].count()
- JavaScript tools,增加数据框的交互性;
- Qgrid,增加数据框的交互性;
- PivottableJs,像Excel一样,通过拖动变量来快速制作透视表;
- PandasGUI,支持数据的过滤、变量的构建,结合plotly还可以进行快速的可视化,并生成画图代码;
- mitosheet,和pandasgui类似,但是界面更好看,不过画图类型少很多;
- Tabloo,基于Flask,和mitosheet/pandasgui类似,但是功能更简单,且没有代码生成功能;
- Dtale,后端同样基于Flask,前端基于React,数据展示、统计分析、画图等;
- sviewgui(df+csv),基于matplotlib和seaborn画图,同时还能自动生成相应代码;
个人最常用的是mitosheet和sviewgui。
- 快捷地生成年龄列:;
- 获取当前时间:;
- 转换时间:;
- 基于某列的取值删除重复值:df.drop_duplicates(subset=['column1'], keep='first') ;
- 基于某行删除重复值:f.drop_duplicates(keep='first');
- 检查是否删除了某些重复值:df.equals(df.drop_duplicates(subset=['column1'], keep='first'))
- 显示被删除的重复行:df.drop_duplicates(keep="first").append(df.drop_duplicates(keep=False)).drop_duplicates(keep=False)
分类变量在sklearn中的编码方式有两大类:数字编码(label encoder,简单数字编码或顺序编码),独热编码(one-hot)。
- 分类变量的处理(参考:)
1.1 分类变量 sklearn LabelEncoder:
在简单数字编码的基础上,增加顺序:
1.2. 分类变量转换为哑变量,加入模型,one-hot encoder:
2. 数据的切割
2.1 随机后切割
- 安装 pip:;
- 安装某个包:,,默认是pypi在线安装,也可以本地安装;
- 指定版本安装某个包:;
- 卸载某个包:;
- 列出所有安装的包及版本信息:;
- 列出所有不是最新版本的包的信息:;
- 升级某个包:;
- 列出某个包的详细信息:;
- 下载某个包:,下载之后可以安装,或者构建再安装;
参考:
查看全部已经安装的包的版本(pip)
查看某个模块的版本:
(1)pandas 官方教材:
(2)机器学习 sklearn 快速入门神书:
(3)Python 基础:
(4)Python 升级:
(5)Python 高阶1:
(6)Python 高阶2:
-----全文结束-----
到此这篇pivot函数Python(pivot函数hive)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/pythonbc/12839.html