当前位置: 首页 > news >正文

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库讲完了。刚好十条,十全十美,哈哈哈哈。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序配置访问服务器失败所发现的问题及解决方案
  • 接入百度文心一言API教程
  • Godot入门 05收集物品
  • Windows 端口占用 Port 端口占用 如何发现端口占用并且强杀?
  • 【七】Hadoop3.3.4基于ubuntu24的分布式集群安装
  • 在生信分析中大家需要特别注意的事情​
  • C++ | Leetcode C++题解之第295题数据流的中位数
  • 开源模型应用落地-LangChain实用小技巧-MessagesPlaceholder使用(二)
  • 昇思MindSpore 应用学习-RNN实现情感分类-CSDN
  • Python 百题(实战快速掌握语法)_2(链表)
  • 全国区块链职业技能大赛样题第9套智能合约+数据库表设计
  • Linux网络-netstat命令
  • C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型
  • 面对AI伦理挑战:共筑稳固安全的未来发展之路
  • vue项目启动报错 vue与vue-template-compiler版本不一致
  • 收藏网友的 源程序下载网
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Android单元测试 - 几个重要问题
  • ES6系列(二)变量的解构赋值
  • go append函数以及写入
  • IOS评论框不贴底(ios12新bug)
  • JSDuck 与 AngularJS 融合技巧
  • 闭包,sync使用细节
  • 初探 Vue 生命周期和钩子函数
  • 回顾 Swift 多平台移植进度 #2
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 巧用 TypeScript (一)
  • 首页查询功能的一次实现过程
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • python最赚钱的4个方向,你最心动的是哪个?
  • 如何正确理解,内页权重高于首页?
  • ​渐进式Web应用PWA的未来
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #pragma data_seg 共享数据区(转)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET 通过系统影子账户实现权限维持
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net访问oracle数据库性能问题
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net项目IIS、VS 附加进程调试
  • :“Failed to access IIS metabase”解决方法
  • ??javascript里的变量问题
  • @Conditional注解详解