快醒醒,别睡了!...讲《数据分析pandas库》了—/—<5>

news2024/11/24 21:00:53

一、

1、修改替换变量值

        本质上是如何直接指定单元格的问题,只要能准确定位单元地址,就能够做到准确替换。

1.1 对应数值的替换

具体用法如下:

replace方法:
df.replace(
    to_replace = None :将被替换的原数值,所有严格匹配的数值将被用 value 替换,可以str/regex/list/dict/Series/numeric/None
    value = None :希望填充的新数值
    inplace = False
)
import pandas as pd

data = {'Name': ['John', 'Alice', 'Bob', 'Emily', 'Tom'],
        'Age': [25, 30, 35, 40, 45]}
df = pd.DataFrame(data)
df['Age'] = df['Age'].replace({30: 32})

图示代码即创建5行2列的DateFrame,然后将Age列中的30替换成32

map方法:

将年龄为40岁及以上的人替换为老年人,年龄为25岁及以下的人替换为青年人,可以使用下列方法:

age_mapping = {25: '青年人', 30: '青年人', 35: '青年人', 40: '老年人', 45: '老年人'}
df['Age'] = df['Age'].map(age_mapping)

1.2 指定数值范围的替换
方法一:使用正则表达式完成替换
df.replace(regex, newvalue)
方法二:使用行筛选方式完成替换

用行筛选方式得到行索引,然后用 loc 命令定位替换,目前也支持直接筛选出单元格进行数值替换

注意: query 命令的类 SQL 语句可以逬行检索,但不直接支持数值替换
# 使用正则匹配数据
df.开设.replace(regex = '不.+',value = '可以',inplace = True)# 这行代码使用正则表达式匹配'开设'列中以'不'开头的文本,并将其替换为'可以'
#iloc loc
df.支出.iloc[0:3] = 20 #这两行代码分别使用iloc和loc进行索引,将'支出'列中前3行的数据替换为20和30。
df.支出.loc[0:2] =30 
#条件筛选替换
df.体重[df.体重>70] =70 #这行代码使用条件筛选,将'体重'列中大于70的数值替换为70。
df[df.体重==70].体重 = 80  #这行代码使用条件筛选找到'体重'列中值为70的行,并将其'体重'值替换为80。需要注意这种用法在一些情况下可能会引发SettingWithCopyWarning警告,可以使用.loc方法解决:df.loc[df.体重 == 70, '体重'] = 80
#query()的使用
df.query('性别 == "女" and 体重 > 60 ').体重 =50 #这行代码使用query查询语句筛选出满足'性别为女且体重大于60'的行,并将其'体重'值替换为50。同样需要注意引用问题,可以使用.loc方法解决:df.loc[df.query('性别 == "女" and 体重 > 60').体重.index, '体重'] = 50
df.loc[df.query('性别 == "女" and 体重 > 60').体重.index,'体重'] = 50

1.3虚拟变量变换

其使用方法如下:

pd.get_dummies(
data :希望转换的数据框/变量列
prefix = None :哑变量名称前缀
prefix_sep = 11 :前缀和序号之间的连接字符,设定有prefix 或列名时生效
dummy_na = False :是否为 NaNs 专门设定一个哑变量列
columns = None :希望转换的原始列名,如果不设定,则转换所有符合条件的列
drop_first = False :是否返回 k-l 个哑变量,而不是 k 个哑变量)#返回值为数据框
df2.head()#用于显示df2的前几行数据,以便我们了解数据的结构和内容。
pd.get_dummies(df2.类型,prefix = '_' )#这行代码将df2中的'类型'列进行独热编码,生成多个哑变量列,以'_类型'作为前缀,并返回编码后的DataFrame。例如,如果'类型'列有两个取值'A'和'B',则会生成两个哑变量列'_A'和'_B',其中相应的位置为1表示对应的取值存在,为0表示对应的取值不存在。
pd.get_dummies(df2 , columns= [ '类型' ])#直接对整个DataFrame进行操作,将'类型'列独热编码为多个哑变量列。这样可以同时对多个分类变量进行独热编码,生成相应的哑变量列。

2、数值变量分段

其具体用法如下:

pd.cut(
    X :希望逬行分段的变量列名称
    bins :具体的分段设定
    int :被等距等分的段数
    sequence of scalars :具体的每一个分段起点,必须包括最值,可不等距
    right = True :每段是否包括右侧界值
    labels = None :为每个分段提供自定义标签
    include_lowest = False :第一段是否包括最左侧界值,需要和
    right 参数配合
)#分段结果是数值类型为 Categories 的序列

pd.qcut # 按均值取值范围进行等分
#按均值取值范围进行等分
df['cut1'] = pd.qcut(df.身高,q=5)#表示将df中的列身高按照相等频率来进行分段,分成5个区间。这里的相等频率指的是每个区间中包含的数据个数相同。返回的结果是一个Categorical类型的Series,表示每个数据所属的区间。这个结果会赋值给df['cut1']列。
#自定义分段
df['cut2'] = pd.cut(df.身高,bins=[150,160,170,180,190],right=False)#自定义分段,将"身高"分成4个区间,分别为[150,160),[160,170),[170,180),[180,190),并赋值给新的列"cut2"。right=False表示左闭右开区间,即不包含右边界值。

3、数据分组

df.groupby(
 by :用于分组的变量名/函数
 level = None :相应的轴存在多重索引时,指定用于分组的级别
 as_index = True :在结果中将组标签作为索引
 sort = True :结果是否按照分组关键字逬行排序
)#生成的是分组索引标记,而不是新的 df
dfg = df.groupby ('开设')
#查看dfg里面的数据
dfg.groups
#查看具体描述
dfg.describe( )
#按多列分组
dfg2 = df.groupby(['性别','开设'])
dfg2.mean ()
  • dfg.groups可以查看dfg中的分组信息,返回一个字典,其中键表示分组的标签,值是该分组对应的行索引。

  • dfg.describe()可以查看每个分组的具体描述统计信息,包括计数、均值、标准差、最小值、25%分位数、中位数、75%分位数、最大值等。

  • 另外一段代码是将DataFrame按照"性别"和"开设"两列进行多级分组,将分组结果赋值给dfg2。

  • dfg2.mean()对分组后的数据求均值,返回每个分组的平均值。结果是一个新的DataFrame,其中列名是原始DataFrame中的数值列名,索引是多级索引,分别包含"性别"和"开设"两列的不同取值组合。

基于拆分进行筛选,筛选出其中一组
dfgroup.get_group()
dfg.get_group ('不必要').mean ()
dfg.get_group ('不必要').std ()
筛选出所需的列,该操作也适用于希望对不同的变量列进行不同操作时
dfg['身高'].max()

4、分组汇总

        在使用 groupby 完成数据分组后,就可以按照需求进行分组信息汇总,此时可以使用其它专门的汇总命令,如 agg 来完成汇总操作。

4.1 使用 agg 函数进行汇总
df.aggregate( )
#名称可以直接简写为 agg
#可以用 axis 指定汇总维度
可以直接使用的汇总函数
1、count():计算数据的非缺失值的数量
2、sum():计算数据的总和
3、mean():计算数据平均值
4、media():计算数据中位数
5、min():计算数据最小值
6、max():计算最大值
7、std():计算标准差
8、var():计算方差
9、skew():用于计算数据的偏度。偏度是描述数据分布形态的统计量,它衡量了数据分布的不对称性。
10、kurt():用于计算数据的峰度。峰度是描述数据分布形态的统计量,它衡量了数据分布的尖锐程度。
11、quantlie():用于计算数据的分位数。分位数是将数据从小到大划分成不同的部分,用于描述数据的位置。
12、cov():用于计算两个变量之间的协方差。协方差是衡量两个变量之间线性相关性的指标,表示变量的变化趋势是否一致。正值表示正相关,负值表示负相关,而值越大表示相关性越强。
13、corr():用于计算两个变量之间的相关系数。相关系数是衡量两个变量之间线性相关性强弱的指标,取值范围在-1到1之间。相关系数为1表示完全正相关,为-1表示完全负相关,为0表示无相关性。
使用方法:
dfg.agg( 'count')
dfg.agg('median')
dfg.agg(['mean', 'median'])
dfg.agg(['mean', 'median'])
#引用非内置函数
import numpy as np
df2.身高.agg (np. sum)
dfg.身高.agg (np. sum)
引用自定义函数:
# 使用自定义函数
def mynum(x:int) ->int:
    return x.min()
df2.身高.agg (mymean)
dfg.agg(mymean)

函数mynum(x:int) ->int的定义中,参数x是一个整数类型,函数返回值也是一个整数类型。

x.min()表示对参数x取最小值,并将最小值作为函数的返回值

.agg()是DataFrame对象的一个函数,用于对DataFrame中的某一列或多列应用一个或多个聚合函数。

df2表示DataFrame df2 中的名为"身高"的列,mynean是自定义的聚合函数,它会被应用于"身高"这一列,并返回最小值

dfg 是另一个DataFrame对象。相同地,.agg()函数将会对dfg 中的所有列应用mymean这个聚合函数,并返回每列的最小值。

注意: .agg()函数可以接受多个聚合函数作为参数,并返回结果的DataFrame或Series。如果未指定聚合函数,默认情况下会计算每一列的平均值。

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

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

相关文章

matlab6.5免安装版,解压即可用【亲测win10可用】

这个版本是咱第一次学matlab的时候用的处女版,如今看着这个界面依然恍如昨日。为甚要分享这种老掉牙古董matlab版本呢?原因在于一款老古董工具箱 —— geatbx。 这款工具箱采用了古老pcode的加密系统加密,而matlab的pcode加密经过几次迭代&a…

数据库开发:MySQL基础(二)

MySQL基础(二) 一、表的关联关系 在关系型数据库中,表之间可以通过关联关系进行连接和查询。关联关系是指两个或多个表之间的关系,通过共享相同的列或键来建立连接。常见的关联关系有三种类型:一对多关系,…

【机器学习】智驭未来:机器学习如何重塑制造业的转型与升级

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 机器学习重塑制造业生产流程🌸预测性维护:减少停机时间,提高设…

JavaScript(17)——事件监听

什么是事件? 事件是在编程时系统内发生的动作或发生的事情,比如用户在网页上单击一个按钮 什么是事件监听? 就是让程序检测是否有事件产生,一旦有事件触发,就立刻调用一个函数做出响应,也称为绑定事件或…

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说,创建一个文件&a…

【 C++ 】 一文搞定——引用、内联、命名空间、缺省、重载

前言:这篇文章将带您了解C基础中的知识点——命名空间、引用、内联、缺省、重载 😘我的主页:OMGmyhair-CSDN博客 一、命名空间namespace 1.可以嵌套定义,但是只能定义在全局 namespace ly {int student 1;int age 21;void Pr…

剑和沙盒 6 - 线程辱骂 – 使用线程名称进行攻击

强调: 进程注入是攻击者工具包中的重要技术之一。在下面的文章中 解释了如何滥用线程描述 API 来绕过端点保护产品。提出了一种新的注入技术:Thread Name-Calling,并给出了实施保护的相关建议。 介绍 进程注入是攻击者使用的重要技术之一 。…

Go-知识panic

Go-知识panic 1. 介绍2. 工作机制2.1 panic函数2.2 工作流程2.3 总结 3. 原理3.1 数据结构3.2 gopanic没有deferdefer函数处理嵌套defer 4. 总结 Go-知识error :https://blog.csdn.net/a18792721831/article/details/140430350 Go-知识defer : https://blog.csdn.net/a18792721…

单片机基于TXW8301的Wi-Fi Halow物联网控制

目前市面上基于2.4/5.8G wifi通讯信号干扰很频繁,基于Wi-Fi Halow的sub1g wifi既可以绕过干扰还可以达到公里级别控制,并且实现高清图传非常方便。 什么是Wi-Fi Halow?有何优势? 早在2016年3月,Wi-Fi联盟就针对物联网…

YOLO v8目标检测(二)—v8理论与模型推理

YOLO v8目标检测 数据增强 使用场景:在数据加载器加载数据的过程中会使用到数据增强的相关方法,来构造数据集。模型推理方法进行学习之前首先复习了解图像数据增强的相关方法和步骤。 其中在v8的源代码中 augment.py 的源代码文件。它包含了几个用于数据…

【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

java项目数据库 mysql 迁移到 达梦

目录 一、下载安装达梦数据库 1、下载 2、解压 3、安装 二、迁移 三、更改SpringBoot 的 yml文件 1、达梦创建用户 2、修改yml 一、下载安装达梦数据库 1、下载 下载地址 https://eco.dameng.com/download/ 点击下载 开发版 (X86平台) , 然后选择操作系统并点击立…

重装win10系统,“我们无法创建新的分区 也找不到现有的分区”“我们无法更新系统保留的分区”

重装系统,最开始用这篇教程保留数据的重装系统教程!(win10系统)_win10重装系统保留c盘数据-CSDN博客里win10官方的更新方法。想保留C盘以外的数据来重装系统 然后就会提示“我们无法更新系统保留的分区” 查到网上说这是因为MSR分…

python基础巩固

基本数据类型 可以用isinstance来判断 a111 isinstance(a,int) True数值运算: >>> 2 / 4 # 除法,得到一个浮点数 0.5 >>> 2 // 4 # 除法,得到一个整数 0 >>> 17 % 3 # 取余 2Python 字符串不能被改变。向一个…

支持向量机 及其分类案例详解(附Python 代码)

支持向量机分类器预测收入等级 我们将构建一个支持向量机(SVM)分类器,以预测一个人基于14个属性的收入等级。我们的目标是判断收入是否高于或低于每年$50,000。因此,这是一个二元分类问题。我们将使用在此处可用的人口普查收入数…

MySQL数据库(基础篇)

🌏个人博客主页:心.c 前言:今天讲解的是MySQL的详细知识点的,希望大家可以收货满满,话不多说,直接开始搞! 🔥🔥🔥文章专题:MySQL 😽感…

语言转文字

因为工作原因需要将语音转化为文字,经常搜索终于找到一个免费的好用工具,记录下使用方法 安装Whisper 搜索Colaboratory 右上方链接服务 执行 !pip install githttps://github.com/openai/whisper.git !sudo apt update && sudo apt install f…

Arduino IDE界面和设置(基础知识)

Arduino IDE界面和设置(基础知识) 1-2 Arduino IDE界面和设置如何来正确选择Arduino开发板型号如何正确选择Arduino这个端口如何来保存一个Arduino程序Arduino ide 的界面功能按钮验证编译上传新建打开保存工作状态 1-2 Arduino IDE界面和设置 大家好这…

软设之数据库概念结构设计

集成的方法: 多个局部E-R图一次集成 逐步集成,用累加的方式一次集成两个局部E-R 集成产生的冲突及解决办法: 属性冲突:包括属性冲突和属性取值冲突 命名冲突:包括同名异义和异名同义 结构冲突:包括同…

react.16+

1、函数式组件 在vite脚手架中执行&#xff1a; app.jsx: import { useState } from react import reactLogo from ./assets/react.svg import viteLogo from /vite.svg import ./App.cssfunction App() {console.log(this)return <h2>我是函数式组件</h2> }exp…