当前位置:网站首页 > Python编程 > 正文

pivot函数Python(pivot函数hive)



  • pandas 名字的全称是 panel data analysis,用于Pyton的表格数据分析+可视化:
  • 基于NumPy+matplotlib创建;
  • Python数据处理的核心包;
  • 功能可对标Excel及R语言的Tidyverse;
  • 也和SQL/Stata/SAS等软件有大量重叠的数据处理功能;
  • 知识点比较零碎,学习门槛较高;
  • 开源、免费、灵活、高效;
  • 某些功能还不够完善,但一直保持快速迭代。

Btw,本文所参考的是 pandas 的开发者 Wes McKinney大神的作品《利用Python进行数据分析》——pandas最重要的参考书籍,没有之一(书的链接在文末)。

先整理下Pandas的逻辑运算符号。

Pandas(Python)
逻辑运算含义~not,取否&and|or^xordf.any()anydf.all()all<, >, ==,!=小于,大于,等于,不等于<=, >=小于或等于,大于或等于pd.isnull(obj)评断某列中的元素是否为空值pd.isnotnull(obj)评断某列中的元素是否非空

加速 pandas 的运算

  1. 导入数据:;特别地,导入Stata数据并打印变量+对应标签(label)的列表:;
  2. 导出数据:;
  3. 设置完整输出结果:;;
  4. df的转置:;
  5. df的列堆叠:;
  6. 快速虚构一个 4x5 的数据框:, ;
  7. 快速虚构一个 2x2 的数据框:;
  8. df 的去重:,指定删除姓名列重复的值,并保留第一个样本;
  9. Series 的去重:,保留唯一的取值;
  10. df的随机抽样,n个:;
  11. df的随机抽样,;
  12. Series的随机抽样,n个:;
  13. Series的随机抽样,30%:;
  14. 转换为 NumPy 数据:;
  • 1. 将汇总数据 (透视表),转换为比例(归一化):
    ;
  • 2. 独热编码 OneHot Coder:

0.2 多个 Excel 文档快速合并

  1. 查看序列 Series 的 name:;
  2. 查看序列的 index:;
  3. 查看序列的 index 的 name:;
  4. 查看序列的前6个元素:;
  5. 查看序列的倒数第5个到最后1个,即最后5个元素:;
  6. 查看数据框的行数:;
  7. 查看数据框的行数和列数 - shape:;
  8. 查看数据框的大小:;
  9. 查看数据框的概要信息:,返回的是 shape,各列的非缺失值个数、数据类型;
  10. 查看各变量的数据类型:;
  11. 查看df的表格内容:;
  12. 查看df的各个列名称:;
  13. 重命名列:;
  14. 提取列:,提取3列;
  15. 选定某列:
  16. 根据正则表达式,选取名称符合条件的部分列: ;
  17. 查看全部变量的描述性统计:
  18. 查看某个数字型变量的描述性统计: ;
  19. df['name'].describe() ,查看某个字符型变量的描述,包括count、unique、top(第一行取值)、freq(第一行取值的频数)、name(变量名称)、dtype(数据类型);
  20. 查看所有的列名称
  21. 查看数据的头n条记录:;
  22. 查看变量A的前n个取值: ;
  23. 查看头5条数据,A和B两个变量:;
  24. 查看第一行: ;
  25. 查看1- 5行:,相当于;
  26. 查看第1行、和第1-3列交叉的数据: ,基于数据切片
  27. 筛选某行数据: ,输出“id==1200”所在的行;
  28. 查看某个变量的均值:
  29. 排序: ,整个数据集基于price变量升序排序之后,对price变量转换为整形之后进行描述性统计
  30. 排序,基于index:;
  31. 查看各个列的索引(index, 方便用作iloc)和名称:

最常用的变量(列)描述性统计指标,通常包括(和上面的部分重复):

  1. 查看行数:;
  2. 变量取值的统计: ;
  3. 查看变量的可能取值:,返回的信息比更少,但返回的是列表方便引用;
  4. 查看各变量的统计情况:;
  5. 查看某个变量的统计情况:,字符型变量和数值型变量的返回结果不同;
  6. 查看某个对象的和:;
  7. 查看某个对象的最小值:df;
  8. 查看某个对象的最大值:;
  9. 查看某个对象的标准差:;
  10. 查看某个对象的均值:;
  11. 查看某个对象的中位数:;
  12. 查看某个对象的IQR:;

排序

  1. 基于某个变量进行排序:;
  2. 基于某两个变量进行排序: ;
  3. 基于某个变量进行降序排序:;
  4. 序列基于索引进行排序:;
  5. 返回某列的元素的排名:;
  1. 返回某些列最大值,所在行的索引:,最小值min类似;
  2. 返回索引的值:;
  3. 检查索引值是否唯一:;
  4. 查看索引的数据类型:;
  5. 查看索引的名称:;
  6. 查看df的列名称(列索引):;
  7. 重命名列的名称:,这里假设原有3列;
  8. 重命名列的名称:;
  9. 索引的重置:,重新使用默认索引,把原来的索引当成新的一列,则直接删除行索引;
多层索引,multi-index:除了平时我们常用的行、列索引之外,pandas还拥有“多层索引”,这是一般其它统计工具都没有的特性。多层索引在形式上和 groupby对象/数据透视表的行、列分类变量类似,事实上数据透视表的索引就是多层索引。
  1. 多层列索引的引用:,或者,多层行索引可使用;
  2. 多层索引的查看:,;
  1. 整体查看变量的缺失概况:;
  2. 整体查看变量的缺失概况:, ;
  3. 删除包括缺失值的样本:;
  4. 删除包含缺失值的行:;
  5. 删除某个变量包含缺失值的行:,删除姓名为空的所有样本。或者;
  6. 删除某两列中有缺失值的行: ;
  7. 删除包含缺失值的列:;
  8. 找出带有缺失值的行:(?);
  9. 转换某列的数据类型:;
  10. 获取某列中非缺失的值:,返回的是一个列表(name这一列);
  11. 缺失值的填充:;
  12. 找出某一列有缺失的观测值:;
  13. 字符型/分类变量计数:;
  14. 将缺失值填充为“0”:;
  15. 某列的均值替代:;
  16. 显示存在缺失值的行:df[df.isnull().T.any()];
  17. 删除存在缺失值的行:df.dropna(axis=0, how='any') ;
  18. 删除存在缺失值的列:df.dropna(axis=1, how='any') ;

重复值:

  • 1. 查看id重复的所有样本:;
  1. 筛选某些列,基于列名+正则表达式:,选出列名开头为 Sepal 的列;
  2. 选择其中是数值型的列:;
  3. 选择符合某个条件的观测值行:,选出成年人样本;
  4. 选择符合某个条件的观测值行,并显示某些列:,选出成年的所有行,并显示姓名+性别列;
  5. 选择某两列:,loc 是最灵活的检索方式;
  6. 选择某个元素,并输出索引:,选择行索引名称为1且列索引名称为a的那个元素;
  7. 选择某些行:,选择姓名是 Curry 的那一行数据;
  8. 选择某些行+某些列:;
  9. 选择多行:,选择第2、4行;iloc可以用默认的整数形式的索引;
  10. 选择某个元素,并输出索引:,选择第2行和第2列交叉的那个元素;
  11. 选择某个元素,不输出索引:; 选择第2行和第2列交叉的那个元素——这里加上="new_value",就可以修改某个cell的取值了
  12. 检索符合某个条件值的多行:;
  13. 删除符合条件的多行:;
  14. 检索符合某个条件值的多行:,删除用“!=”;
  15. 删除某些行,比如删除那些['编码']中,不包含'2021'的行:,这里假设编码处于 2-5 位,比如“Y2021”;
  16. 切片,选择行索引为“0-1-2”共3行:;
  17. 取出两列并重命名,构成新的数据框:取出两列,重命名为age和income; pd.DataFrame({"age": "df.a", "income": "df.i"});

(df.a==1).describe()

查询函数:

  1. 输出符合A列大于B列条件的所有行:,等价于;

,基于索引名称的正则表达式的筛选函数:

  1. 查询列索引中名称末尾字母为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);
  1. 简单地新建一列:,新建一个叫 age 的列,全部取值为10;
  2. 手工输入一列:;
  3. 手动输入一行:;
  4. 数值列的运算:;
  5. 数值列的运算:;
  6. 字符型列的拼接:;
  7. 删除行:,删除行索引名称为1的行; df.drop([0, 1], axis=0), 删除前两行;
  8. 删除某些符合条件的行:df.drop(df.loc[df['name'] == '王几行'].index, axis=0),删除姓名为“王几行”的所有样本值;
  9. 删除列:; ;
  10. 删除b那一列:;
  11. 删除某几列:;
  12. 删除第1和第2行:df.drop([0, 1]),默认的行索引;
  13. 删除性名列同时删除前两行:df.drop(columns='Name', index=[0,1])
  1. 转换为时间类型:;
  2. 求时间间隔 delta:df;
  3. 把时间变量设置为索引:;
  1. 咱们这里先看下相反的情况,连续变量向分类变量进行转变:

2. 分类变量转换为哑变量: one-hot 独热编码

解决中文乱码问题(基于 matplotlib画图):

同时画两个子图(来自Harvard CS109):

相关关系矩阵热图:

面板数据中的单变量画图,条形图/饼图:

  1. 单变量画图,直方图:;
  2. 双变量画图,散点图:;

sort_values() 再画频数图 (seaborn):

更完整的画法 (seaborn) :

更多画图的知识细节,可参考以下几篇文章:

  • 的画法共有几种?
  1. 简单地merge两个df:;
  2. 纵向合并3个df:,concat 是“暴力拼接”,不去重;
  3. 横向合并3个df:,concat 是“暴力拼接”,不去重;
  4. append,只有纵向合并:;
  5. 分组统计 groupby:;
  6. 通过 concat 自我复制 3 倍: ,或者,, ,,, ;
  1. 正则表达式 re 的检查:n, 附带有一个cheatsheet;
  2. 某个对象(列)截取部分字符,并应用匿名函数:df,比如;
  3. 提取姓名列的最后一个字母:;
  4. 将某一列转换为整数:;
  5. 打印Stata数据中的变量标签(variable label):;
  6. 精确复制剪贴板的内容:,比如选中了一个带表头的表格,读取的时候会自动设置表头;
  7. 横向合并两个df:;
  8. 分组统计后筛选方法1:

分组统计后筛选方法2:nlargest(10)

10. 用匿名函数进行批量重命名列:, df.columns 查看结果;

11. apply + lambda,构造透视表的行索引

  • df.groupby(by='Gender')['Age'].count()
  1. JavaScript tools,增加数据框的交互性;
  2. Qgrid,增加数据框的交互性;
  3. PivottableJs,像Excel一样,通过拖动变量来快速制作透视表;
  4. PandasGUI,支持数据的过滤、变量的构建,结合plotly还可以进行快速的可视化,并生成画图代码;
  5. mitosheet,和pandasgui类似,但是界面更好看,不过画图类型少很多;
  6. Tabloo,基于Flask,和mitosheet/pandasgui类似,但是功能更简单,且没有代码生成功能;
  7. Dtale,后端同样基于Flask,前端基于React,数据展示、统计分析、画图等;
  8. sviewgui(df+csv),基于matplotlib和seaborn画图,同时还能自动生成相应代码;

个人最常用的是mitosheet和sviewgui。

  1. 快捷地生成年龄列:;
  2. 获取当前时间:;
  3. 转换时间:;
  1. 基于某列的取值删除重复值:df.drop_duplicates(subset=['column1'], keep='first') ;
  2. 基于某行删除重复值:f.drop_duplicates(keep='first');
  3. 检查是否删除了某些重复值:df.equals(df.drop_duplicates(subset=['column1'], keep='first'))
  4. 显示被删除的重复行:df.drop_duplicates(keep="first").append(df.drop_duplicates(keep=False)).drop_duplicates(keep=False)

分类变量在sklearn中的编码方式有两大类:数字编码(label encoder,简单数字编码或顺序编码),独热编码(one-hot)。

  1. 分类变量的处理(参考:)

1.1 分类变量 sklearn LabelEncoder:

在简单数字编码的基础上,增加顺序:

1.2. 分类变量转换为哑变量,加入模型,one-hot encoder:

2. 数据的切割

2.1 随机后切割

  1. 安装 pip:;
  2. 安装某个包:,,默认是pypi在线安装,也可以本地安装;
  3. 指定版本安装某个包:;
  4. 卸载某个包:;
  5. 列出所有安装的包及版本信息:;
  6. 列出所有不是最新版本的包的信息:;
  7. 升级某个包:;
  8. 列出某个包的详细信息:;
  9. 下载某个包:,下载之后可以安装,或者构建再安装;

参考:

查看全部已经安装的包的版本(pip)

查看某个模块的版本:

(1)pandas 官方教材:

(2)机器学习 sklearn 快速入门神书:

(3)Python 基础:

(4)Python 升级:

(5)Python 高阶1:

(6)Python 高阶2:

-----全文结束-----

到此这篇pivot函数Python(pivot函数hive)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • python函数总结(python 的函数)2025-02-18 07:45:09
  • Python函数递归调用(python 递归调用)2025-02-18 07:45:09
  • python pivot函数(python pivot table aggfunc)2025-02-18 07:45:09
  • Python根据安装包安装selenium2025-02-18 07:45:09
  • 关于msms、biopython_residuedepth.py学习2025-02-18 07:45:09
  • python怎么编写函数(python编写函数判断三角形)2025-02-18 07:45:09
  • sigmoid函数输出范围(sigmoid函数python)2025-02-18 07:45:09
  • python deque函数(python中deque())2025-02-18 07:45:09
  • python 字典 增加(python字典增加元素代码)2025-02-18 07:45:09
  • win32gui.FindWindowEx的参数python(pywin32 findwindow)2025-02-18 07:45:09
  • 全屏图片