NumpyPandas:Pandas库(50%-100%)

news2024/11/17 21:43:39

目录

前言

一、排序

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列的值替换成30

stu_df

输出:先定位 再替换

 

2.指定范围替换

# 指定范围替换
stu_df.clazz[stu_df.clazz=='文科六班'] ='文六'  # 将clazz中的文科六班替换成文六
stu_df.age[stu_df.age==22] = 21                # 将age中的22替换成21

stu_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.coloradmin.cn/o/1955873.html

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

相关文章

Anaconda目录

安装目录 Anaconda 在默认情况下会安装到 C:\ProgramData\Anaconda3,而 conda 环境和包会安装在 C:\Users\username\.conda\ 目录下。 备注:我是在windows下安装 的Anaconda。我的安装目录是C:\Program Files\Anaconda3 pkgs目录 在以上两个目录下都有…

QQ微信头像制图工具箱小程序纯前端源码

微信小程序源码,经测试QQ小程序也可以完美运行,所以给大家分享一下这个QQ微信头像制图工具箱小程序纯前端源码。 主要功能有文字九格、头像挂件生成、爆趣九宫格、形状九宫格、创意长图、情侣头像、猫狗交流器。 这个QQ微信小程序源码是纯前端的&#x…

隧道可视化:实时监控保障行车安全

通过图扑可视化实现隧道的实时监控、数据分析及智能报警系统,提供全面的隧道管理和决策支持,提升行车安全,优化维护策略,确保交通顺畅。

notepad++如何跨文件搜索(比如搜索某个目录里的文件)

notepad如何跨文件搜索(比如搜索某个目录里的文件) notepad的搜索结果一直是比较迷,搜出一堆乱七八糟的东西,明显是缓存了,文件已经改名了都还不被notepad意识到

文案创作用这四款AI写作神器,告别熬夜赶稿!

都说懒人有懒福,现在的工具也越来越便捷于我们的日常和办公等等各种场景当中,其中文案的撰写和创作上也是令人脑瓜子疼的事情,所以锁着人工智能的兴起,ai智能写作工具助力我们快速地写作适合的文章,一起来看看下面这四…

数据容器-小结

目录 一、数据容器特点比较 二、数据容器操作小结 1、通用序列操作 2、通用的转换操作 3、案例演示 一、数据容器特点比较 二、数据容器操作小结 1、通用序列操作 2、通用的转换操作 3、案例演示 1)list([iterable]):转换成列表 str_a "…

ctfshow解题方法

171 172 爆库名->爆表名->爆字段名->爆字段值 -1 union select 1,database() ,3 -- //返回数据库名 -1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema库名 -- //获取数据库里的表名 -1 union select 1,group_concat(…

jmeter-beanshell学习-try处理异常

有时候代码执行过程中,出现一些不能处理的情况,就会报错,还影响之后的代码执行,就需要跳过异常。 上面这情况报错了,还影响了下面的打印。beanshell用try和catch处理异常,下面是try的用法,和if有…

Linux系列--shell编程一

一、Linux系统结构 一、内核层 内核是Linux系统的核心部分,它负责管理系统各种硬件设备、文件系统、内存管理和进程管理等核心任务。Linux内核设计了良好的模块化结构,可以动态地加载和卸载内核模块,这使得内核可以兼容各种不同的硬件设备和…

【微软蓝屏】构建更加稳固和安全的网络环境:从“微软蓝屏”事件谈起

最近,那个让全球都头疼的“微软蓝屏”事件,简直就像是科技界的一场大地震。你说这背后的原因,竟然是一个软件更新的小失误?哎呀,这可真是让人哭笑不得。不过,笑归笑,这事儿也给我们提了个醒&…

学习调试:CubeMX点亮LED灯+按键点亮LED灯0.5ms后熄灭+使用User Lable提高代码的重用性

一、CubeMX 点亮 LED 灯 1.1 CubeMX 中操作 1、打开 CubeMX → file → new project 新建一个工程→ 搜索框里输入芯片型号→双击选择芯片对应封装等待 2、根据上面深蓝/浅蓝的导航对 IO 口进行配置: (1)Pinout & Configuration&…

如何利用开源Bug管理系统提高团队效率

国内外主流的10款开源bug管理系统对比:PingCode、Worktile、Trac、WebIssues、MantisBT、Bugzilla 、Fossil、The Bug Genie、TestLink 、OpenProject。 在软件开发的复杂世界中,Bug管理可能是一个令人头疼的问题,尤其是当工具不足以捕捉和解…

C语言进阶版—扫雷游戏

文章目录 1. 打印棋盘2. 游戏逻辑3. 游戏框架3.1 打印菜单3.2 do……while实现主逻辑3.3 创建棋盘3.4 初始化棋盘3.5 设置雷3.6 排查雷 完整游戏代码 1. 打印棋盘 在正式讲解扫雷游戏之前,我们简单来看一下打印出来的棋盘.   第一步我们要打印每行的框架 printf…

一文带你读懂TCP

文章目录 1 TCP协议1.1 TCP 基础1.1.1 TCP 特性1.2.2 TCP连接数 1.2 TCP 头1.2.1 TCP 头格式1.2.2 MTU,MSS,分片传输 1.3 TCP 连接三路握手1.4 TCP 断开四次挥手1.5 SYN攻击和防范1.6 重传机制1.6.1 超时重传1.6.2 快速重传1.6.3 SACK 1.7 滑动窗口1.8 流…

【Vulnhub系列】Vulnhub_DC-1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_DC-1靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、环境准备 1、在百度网盘中下载DC-1靶场。DC-1靶场受virtual box 的影响,在VM中直接打开是扫描不到IP 的…

基于Java的微博传播分析系统的设计与实现

1 项目介绍 1.1 摘要 本文致力于展示一项创新的微博传播分析系统设计与应用研究,该系统基于Java技术,巧妙利用大数据环境下的社交媒体——微博的庞大用户群及高度活跃特性,旨在深度探索信息传播的内在逻辑与社会影响机制。研究开篇明确定了…

【网络安全】文件上传黑白名单及数组绕过技巧

不安全的文件上传(Unsafe FileUpload) 不安全的文件上传是指Web应用程序在处理用户上传的文件时,没有采取足够的安全措施,导致攻击者可能利用这些漏洞上传恶意文件,进而对服务器或用户造成危害。 目录 一、文件上传…

20240729 每日AI必读资讯

Meta科学家最新采访,揭秘Llama 3.1是如何炼成的 - Llama 3.1都使用了哪些数据?其中有多少合成数据?为什么不使用MoE架构?后训练与RLHF流程是如何进行的?模型评估是如何进行的? - 受访者Thomas Scialom现任…

在Android上实现汉字笔顺动画效果——HanZiWriter

序,万般皆是命,半点不由人。 Hanzi Writer 是 javascript 免费开源库,根据汉字书写时按照笔画顺序的特征,可以播放正确笔画顺序的描边动画和练习测试。支持简体字和繁体字。可以让全球用户能够通过手绘模仿的方式来学习和练习书写…

复杂系统的动态演化与自相似性探究——揭示系统内部的结构与行为模式

复杂系统的动态演化与自相似性探究——揭示系统内部的结构与行为模式 动态演化与自相似性的核心思想 想象一下,你正在观察一棵树的生长。随着时间的推移,树会不断长高,长出新的叶子和枝条。这就是动态演化。同时,你会发现树的每一…