NumpyPandas:Pandas库(50%-100%)

目录

前言

一、排序

1.使用索引排序

2.使用变量值排序

二、计算新变量

1.新变量为常量

2.根据原变量新增列

3.基于一个原变量做函数运算

4.在指定位置插入新列

三、修改替换变量值

1.对应数值替换

2.指定范围替换

四、虚拟变量变换

五、数值变量分组

六、数据分组

七、分组汇总

八、数据合并

1.merge()

2.concat命令

九、处理缺失值

1.查看缺失值

2.判断是否有缺失值

3.填充缺失值

4.删除缺失值

十、数据去重

1.标识出重复的行

2.删除重复行

总结


前言

前两篇讲了pandas库的一半,

Numpy&Pandas:pandas库的安装,Pandas库(0-25%)-CSDN博客

Numpy&Pandas:Pandas库(25%-50%)-CSDN博客

今天这篇一口气将pandas库剩下的一半全讲完。

 

一、排序

1.使用索引排序

  • 多列索引时用level='' 选择使用什么索引进行排序
# 使用索引排序   多列索引时用level='' 选择使用什么索引进行排序
stu_df.sort_index(ascending = False)  # 按照默认索引排序 ascending控制升降序

输出:默认 ascending = False

 

2.使用变量值排序

# 使用变量值排序  
stu_df.sort_values(['age','id'],ascending=[False,True]).reset_index(drop = True) 
# 先根据age进行降序 再根据id进行升序    reset_index将索引还原 drop=True 会将原索引直接删除 

输出:

 

二、计算新变量

1.新变量为常量

stu_df['g'] = 100                 # 新变量为常数

输出:

 

2.根据原变量新增列

stu_df['gg'] = stu_df['age']*10   # 根据原变量新增列

输出:

 

3.基于一个原变量做函数运算

stu_df['22']=stu_df.apply(lambda x: x['age'] if x['age']==22 else 0 ,axis = 1) 
# axis=1 将每一行的元素传进apply函数进行操作
stu_df['22'] = stu_df.apply(lambda x: x['name'] if x['age'] == 22 and x['clazz'] == '文科六班' else 0 ,axis = 1)

输出:

 

4.在指定位置插入新列

stu_df.insert(1,'aaa',100)        # 在指定位置插入新列

输出:

 

三、修改替换变量值

1.对应数值替换

# 对应数值替换  先定位 再替换
stu_df.name[1] = 'tokyo'      # 在name列的第一个位置替换
stu_df['name'][2] = 'suda'
stu_df.loc[1,'age'] = 30       # 将行索引为1的行中的age列的值替换成30stu_df

输出:先定位 再替换

 

2.指定范围替换

# 指定范围替换
stu_df.clazz[stu_df.clazz=='文科六班'] ='文六'  # 将clazz中的文科六班替换成文六
stu_df.age[stu_df.age==22] = 21                # 将age中的22替换成21stu_df.replace(['男','女'],[1,0],inplace=True)  
stu_df.replace({'男':1,'女':0},inplace=True)     # 与上一行作用一样
# 将stu_df中所有包含'男'的值替换为1 所有包含'女'的值替换为 0
# inplace=True表示在原地修改stu_df

输出:

 

四、虚拟变量变换

# 虚拟变量变换pd.get_dummies(stu_df.gender) # 只有两个类别时

输出:

 

五、数值变量分组

# 数值变量分组
stu_df['qcut'] = pd.qcut(stu_df.id,q = 4)                 # 按数量分成四段
# stu_df.age.unique()   # 查看数据框某列有什么数值
# stu_df['qcut'] = pd.qcut(stu_df.age,q = 3,duplicates='drop')  
stu_df['cut'] = pd.cut(stu_df.age,bins = [20,21,23,24,30])   # 在bins里指定每段的左右界,默认左开右闭    
stu_df

输出:

 

六、数据分组

# 数据分组
stu_df.groupby('cut').groups  # 按照cut里的分段将数据框的索引进行分组
stu_df['clazz'] = stu_df.apply(lambda x:'文科六班' if x['clazz']=='文六' else x['clazz'] ,axis = 1) # 将clazz里的文六替换成文科六班
stu_df.groupby(['clazz','gender'])['age'].mean()  # 先按clazz分组 再在clazz里按gender分组 然后将每个组的年龄平均值打印出来

输出:分组之后输出的是Series数据类型

 

七、分组汇总

# 分组汇总
stu_df.groupby('clazz')['age'].agg(['mean','median'])   
# 按clazz分组 获取age的平均值 中位数  再用agg将其汇总

输出:

 

八、数据合并

left=pd.DataFrame({'key':['k0','k1','k2','k3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],})
right=pd.DataFrame({'key':['k0','k1','k2','k4'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2',

1.merge()

  • 内连接 只保留相同key的值
# inner left right
# 内连接 只保留相同key的值
# 外连接 left 以左边的df为基准 保留所有的左边的所有同列名的值
# 全连接 outer 全连接
pd.merge(left,right,how='inner')

输出:

 

  • 外连接 left 以左边的df为基准 保留所有的左边的所有同列名的值
  • right同理

 

  • 全连接 保留所有的key 
pd.merge(left,right,how='outer')  # 全连接 保留所有的key 

输出:

 

2.concat命令

  • 同时支持横向合并与纵向合并 
  • 默认 axis = 0 纵向合并 axis = 1 横向合并

 

九、处理缺失值

df=pd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]])
df

1.查看缺失值

df.info()   # 查看缺失值  total 3 columns 每一行应该有三个数值 # 但 1 2 两行都只有梁非空值 所以 1 2 各有一个缺失值

输出:

 

2.判断是否有缺失值

df.isna()        # 判断是否为缺失值 True即为缺失值
df[df[1].isna()]   # 获取含有空值的单行的值
df.isna().any()    # 检查每一列是否有缺失值

输出:.any()方法默认检查列 可以使用参数axis = 1 检查每一行

 

3.填充缺失值

# ffill front  bfill back   axis默认为0 即垂直方向  axis=1 是水平方向df.fillna(10)  # 用10 将缺失值填充
df.fillna(method='bfill')  # 用缺失值下面的值进行填充
df.fillna(method='bfill',axis = 1)  # 用缺失值右边的值进行填充
df.fillna(method='ffill')  # 用缺失值上面的值进行填充
df.fillna(method='ffill',axis = 1)  # 用缺失值左边的值进行填充for i in df.columns:df[i]=df[i].fillna(np.nanmean(df[i]))    # 使用缺失值同一列数值的平均值进行填充 说明缺失值不参与计算
df

输出:输出的是最后一行代码 ,中间几种情况的输出建议各位用jupyter操作一下,有助于理解

 

4.删除缺失值

  • 一般不会删,而是进行填充
# 删除缺失值
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('默认为以行为单位剔除:')
df.dropna()
print('以列为单位剔除:')
df.dropna(axis='columns')

输出:

 

十、数据去重

1.标识出重复的行

# 标识出重复的行
# pd.set_option('display.max_rows', None)
# stu_df.duplicated(['name','gender'])# 先用name和gender判断 相同为True 不同为False 再用bool取值
stu_df[stu_df.duplicated(['name','gender'])] 

输出:

 

2.删除重复行

# 删除重复行
stu_df.drop_duplicates(keep = 'first')  # keep = 'first' 删除重复行中的第一行
stu_df[~stu_df.duplicated(['name','gender'])]  # 利用查重标识结果直接删除

输出:数据总行数减少了4 ,所以有4行被删除。

 

总结

        Pandas库讲完了。刚好十条,十全十美,哈哈哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式: 基于Session Cookie的登录基于JWT的登录:登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

Python3网络爬虫开发实战(7)JavaScript 动态渲染页面爬取

文章目录 一、Selenium1. 基本安装2. 基本使用3. 声明浏览器对象4. 访问页面5. 查找节点6. 节点交互7. 动作链8. 执行 JavaScript9. 获取节点信息10. 切换 Frame11. 延时等待12. 前进后退13. Cookies14. 选项卡管理15. 异常处理16. 反屏蔽17. 无头模式18. Pyppeteer&#xff0c…

ubuntu 配置opencv-python-imsow()报错

python调用imshow()时出现下面的错误: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-c…

PHP多功能投票系统源码小程序

🎉决策不再难!「多功能投票小程序」一键搞定所有选择困难症✨ 🤔选择困难?「多功能投票小程序」来救场! 每次聚会、团队讨论还是日常小决策,是不是总有那么几个瞬间让你陷入“选哪个好呢?”的…

自动控制:带死区的PID控制算法

带死区的PID控制算法 在计算机控制系统中,为了避免控制动作过于频繁,消除因频繁动作所引起的振荡,可采用带死区的PID控制。带死区的PID控制通过引入一个死区,使得在误差较小的范围内不进行控制动作,从而减少控制系统的…

将nvim的配置 上传gitee

首先是创建仓库 接着进入这个界面 然后是上传代码, 结果: 可以看到已经是可以了。 然后是 拉取代码进行测试。 第一次 拉取 使用 git clone .(家里) 做一点修改,然后上传。(公司) 然后在git pu…

【ROS2】概念:中级-不同的 ROS 2 中间件供应商

目录 支持的 RMW 实现多种 RMW 实现默认 RMW 实现 ROS 2 构建在 DDS/RTPS 之上,作为其中间件,提供发现、序列化和传输。本文( https://design.ros2.org/articles/ros_on_dds.html )详细解释了使用 DDS 实现和/或 DDS 的 RTPS 有线…

Linux驱动开发——字符设备驱动开发

1 概述 1.1 说明 本文是学习rk3568开发板驱动开发的记录,代码依托于rk3568开发板 1.2 字符设备介绍 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺…

用 Manim 库来生成一个树形结构的动画

完整代码: from manim import * class LargeTreeGeneration01(MovingCameraScene): DEPTH 3 CHILDREN_PER_VERTEX 2 LAYOUT_CONFIG {"vertex_spacing": (0.8, 1)} VERTEX_CONF {"radius": 0.12, "color": BLUE_B, "fi…

java基础概念05-运算符

一、自增自减运算符 二、赋值运算符 2-1、注意 三、关系运算符 四、逻辑运算符 4-1、短路逻辑运算符 五、三元运算符 六、运算符的优先级

Catalyst优化器:让你的Spark SQL查询提速10倍

目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…

Linux基本用法(上)

1.计算机主要由 硬件和软件 组成 2.操作系统是什么 ? 有什么作用? 操作系统是软件的一类 主要作用是协助用户调度硬件工作,充当用户和计算机之间的桥梁 3.常见的操作系统有哪些? PC端: Windows,Linux,MacOS 移动端: Android&#xff…

搭建cool-admin-java(前端vue)项目

为什么选择 Cool Admin?​ 随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。 Cool Admin 做为后来者有后发优势,主要特点: Ai 编码,从页面到后端代码&…

数据库实验:SQL Server创建数据库及基本表

一、实验目的: 1、掌握使用SQL SERVER Management Studio工具连接数据库引擎; 2、掌握使用CREATE TABLE 创建基本表的用法; 3、掌握使用ALTER TABLE 修改基本表的用法; 4、掌握使用DROP TABLE删除基本表的用法; 二…

姜夔,师法自然的不仕道人

姜夔(ku),字尧章,号白石道人,约生于南宋绍兴二十四年(公元1154年),卒于南宋嘉定十四年(公元1221年),享年67岁。他的艺术成就涵盖了诗词、散文、书…

Rpi Zero W做的老头乐声控灯

祭图__|\0>历经各种尝试,最后选了docker 里装个rhasspy,配上paho-mqtt搞出了这个奇葩夜灯。各种曲折就不说了,直接分享捷径思路。 这个绿板子是respeaker hat with 2 mic 用的是seeed-voicecard,跟着github编译,不…

微信小程序开发(百货商战)实战项目的购物车和个人中心的创建

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

玩转usbserver之usbserver日志报警

一、graylog 介绍 graylog是一个简单易用、功能较全面的日志管理工具,graylog也采用Elasticsearch作为存储和索引以保障性能,MongoDB用来存储少量的自身配置信息,master-node模式具有很好的扩展性,UI上自带的基础查询与分析功能比…

JAVAWeb实战(后端篇)

因为前后端代码内容过多,这篇只写后端的代码,前端的在另一篇写 项目实战一: 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表,并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…

向日葵RCE复现(CNVD-2022-10270/CNVD-2022-03672)

一、环境 1.1 网上下载低版本的向日葵<2022 二、开始复现 2.1 在目标主机上打开旧版向日葵 2.2 首先打开nmap扫描向日葵主机端口 2.3 在浏览器中访问ip端口号cgi-bin/rpc?actionverify-haras &#xff08;端口号&#xff1a;每一个都尝试&#xff0c;直到获取到session值…