python每日学习14:pandas库的用法(3)

news2024/9/9 5:36:49

python每日学习14:pandas库的用法(3)

  • 修改替换变量值

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

      import pandas as pd
      df=pd.DataFrame({'name':['zs','ls','we'],'weight':[78,70,85],'age':[34,45,29]})
      
      # df.weight[1]=33
      # df['weight'][1]=68
      # df.loc[1,'weight']=55
      # df.weight[df.weight.isin([77,88,55])]=99
      
    • 对应数值的替换

      • df.replace(,to_replace = None,str/regex/list/dict/Series/numeric/Nonevalue = None,inplace = False)
      df.age.replace(554,45,inplace=True)
      df.age.replace([34,29],[0,1],inplace=True)#age列的值从34和29替换为0和1
      df.age.replace({34:'abc',29:'edc'},inplace=True)列的值从3429替换为字符串'女''男'
  • 指定数值范围的替换

    • 方法一:使用正则表达式完成替换:df.replace(regex, newvalue)。

    • 方法二:使用行筛选方式完成替换,用行筛选方式得到行索引,然后用 loc 命令定位替换目前也支持直接筛选出单元格进行数值替换。
      注意:query 命令的类 SQL 语句可以逬行检索,但不直接支持数值替换。

      import pandas as pd
      
      # 创建一个示例DataFrame
      data = {
          '姓名': ['张三', '李四', '王五', '赵六'],
          '性别': ['男', '女', '女', '男'],
          '体重': [65, 72, 75, 60],
          '开设': ['不清楚', '不错', '不行', '不感兴趣'],
          '支出': [100, 100, 100, 100]  # 添加支出列用于演示
      }
      df = pd.DataFrame(data)
      
      # 使用正则匹配数据
      df.开设.replace(regex = '不.+',value = '可以',inplace = True)#使用正则表达式匹配以“不”开头的字符串。将匹配到的字符串替换为“可以”
      #iloc loc
      df.支出.iloc[0:3] = 20
      df.支出.loc[0:2] =30
      #条件筛选替换
      df.体重[df.体重>70] =70
      
      # #query()的使用
      
      df.loc[df.query('性别 == "女" and 体重 > 60').体重.index,'体重'] = 50
      
    • 虚拟变量变换

      • pd.get_dummies(,data,prefix = None,prefix_sep = 11 ,prefix,dummy_na = False ,columns = None,drop_first = False,)#返回值为数据框。
      import pandas as pd
      data = {
          'id': [1, 2, 3, 4],
          '类型': ['A', 'B', 'A', 'C']
      }
      df2 = pd.DataFrame(data)
      
      # 查看DataFrame的前几行
      df2.head()
      
      # 为单个列创建虚拟变量
      pd.get_dummies(df2.类型, prefix='_')
      
      # 为多个列创建虚拟变量
      pd.get_dummies(df2, columns=['类型'])
      
  • 数值变量分段

    • pd.cut(,X ,bins,int,sequence of scalars ,right = True,labels = None,include_lowest = False,right ,)#分段结果是数值类型为 Categories 的序列。pd.qcut # 按均值取值范围进行等分。

      • X :希望逬行分段的变量列名称
        bins :具体的分段设定
        int :被等距等分的段数
        sequence of scalars :具体的每一个分段起点,必须包括最值,可不等距
        right = True :每段是否包括右侧界值
        labels = None :为每个分段提供自定义标签
        include_lowest = False :第一段是否包括最左侧界值,需要和right 参数配合
      import pandas as pd
      data = {
          '姓名': ['张三', '李四', '王五', '赵六'],
          '身高': [165, 175, 160, 180]
      }
      df = pd.DataFrame(data)
      # 按均值取值范围进行等分
      df['cut1'] = pd.qcut(df.身高, q=5)
      # 自定义分段
      df['cut2'] = pd.cut(df.身高, bins=[150, 160, 170, 180, 190], right=False)
      print(df)
      
  • 数据分组

    • df.groupby(,by , level = None ,as_index = True,sort = True,)#生成的是分组索引标记,0而不是新的 df。

      • by :用于分组的变量名/函数
        level = None :相应的轴存在多重索引时,指定用于分组的级别
        as_index = True :在结果中将组标签作为索引
        sort = True :结果是否按照分组关键字逬行排序
      import pandas as pd
      
      # 创建一个示例DataFrame
      data = {
          '姓名': ['张三', '李四', '王五', '赵六'],
          '性别': ['男', '女', '女', '男'],
          '体重': [65, 72, 75, 60],
          '开设': ['可以', '可以', '不清楚', '不感兴趣']
      }
      df = pd.DataFrame(data)
      
      # 按'开设'列分组
      dfg=df.groupby('开设')
      dfg.groups
      
      # 查看分组的描述性统计
      dfg.describe()
      
      # 按'性别'和'开设'列分组
      dfg2 = df.groupby(['性别', '开设'])
      dfg2.groups
      
      # 查看多列分组的均值
      df.groupby(['开设'])['体重'].mean()
      
  • 分组汇总

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

    • 使用 agg 函数进行汇总df.aggregate( ),名称可以直接简写为 agg,可以用 axis 指定汇总维度,可以直接使用的汇总函数。

      • count(): 计算非空观测值的数量。
      • size(): 计算组的大小,即组内元素的数量。
      • sum(): 计算值的总和。
      • mean(): 计算值的平均值。
      • median(): 计算值的中位数,即按大小排序后位于中间位置的值。
      • min(): 找出值中的最小值。
      • max(): 找出值中的最大值。
      • std(): 计算值的无偏标准差,即样本标准差。
      • var(): 计算值的无偏方差。
      • skew(): 计算值的无偏偏度(第三阶矩)。
      • kurt(): 计算值的无偏峰度(第四阶矩)。
      • quantile(): 计算样本的分位数,即指定百分比位置的值。
      • apply(): 通用应用函数,允许对数据集执行自定义操作。
      • cov(): 计算两个变量的无偏协方差。
      • corr(): 计算两个变量的相关系数。
      import pandas as pd
      import numpy as np
      data = {
          '姓名': ['张三', '李四', '王五', '赵六'],
          '性别': ['男', '女', '女', '男'],
          '体重': [65, 72, 75, 60],
          '身高': [175, 165, 160, 180],
          '开设': ['可以', '可以', '不清楚', '不感兴趣']
      }
      df = pd.DataFrame(data)
      
      # 按'开设'列分组
      dfg = df.groupby('开设')
      dfg.agg('count')
      
  • 处理缺失值

    # 认识缺失值
    # 系统默认的缺失值 None 和 np. nan
    data=pd.Series([3,4,np.nan,1,5,None])
    df=pd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]])
    
    # 缺失值查看
    # 直接调用info()方法就会返回每一列的缺失情况。
    df.info()
    
    # 还可以用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回
    # True,如果不是缺失值返回False。
    # df.isna(): 检查相应的数据是否为缺失值 同 df.isnull()。
    # df.notna()等同于notnull()
    df.isnull()
    df.isna()
    df[df.isnull()]
    df[df.notnull()]
    
    # 检查多个单元格的取值是否为指定缺值
    # df.any(
    #  axis : index (0), columns (1)
    #  skipna = True :检查时是否忽略缺失值
    #  level = None :多重索引时指定具体的级别
    # )
    # df.all(
    #  axis : index (0), columns (1)
    #  skipna = True :检查时是否忽略缺失值
    #  level = None :多重索引时指定具体的级别
    # )
    #默认检测的是列值
    df.isna().any()
    
  • 填充缺失值

    • 调用fillna()方法对数据表中的所有缺失值进行填充,在fillna()方法中输入要填充的值。还可以通过method参数使用前一个数和后一个数来进行填充。df.fillna(,value ,dict/Series/DataFrame ,method = None ,limit = None,axis : index (0), columns (1),inplace = False)。

      • value :用于填充缺失值的数值,也可以提供
        dict/Series/DataFrame 以进—步指明哪些索引/列会被替换 不能使用 list
        method = None :有索引时具体的填充方法,向前填充,向后填充等
        limit = None :指定了 method 后设定具体的最大填充步长,此步长不能填充
        axis : index (0), columns (1)
        inplace = False
      # Series对象缺失值填充
      df=pd.Series([3,4,np.nan,1,5,None])
      
      # 以0进行填充:
      df.fillna(0)
      
      # 以前一个数进行填充
      df.fillna(method='ffill')
      
      # 以后一个数进行填充:
      df.fillna(method='bfill')
      
      # 先按前一个,再按后一个
      df.fillna(method='bfill').fillna(method='ffill')
      
      # DataFrame对象缺失值填充
      df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
      
      # 使用数值0来填充
      df.fillna(0)
      # 使用行的前一个数来填充
      df.fillna(method='ffill')
      # 使用列的后一个数来填充
      df.fillna(method='bfill' ,axis=1)
      
  • 删除缺失值

    • 调用dropna()方法删除缺失值,dropna()方法默认删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除。如果想按列为单位删除缺失值,需要传入参数axis=’columns’。
      df.dropna(,axis = 0,how = any,any ,all ,thresh = None,int,subset,inplace = False )

      • axis = 0 : index (0), columns (1)
        how = any : any、all
        any :任何一个为 NA 就删除
        all :所有的都是 NA 删除
        thresh = None :删除的数量阈值,
        int
        subset :希望在处理中包括的行/列子集
        inplace = False
      # 删除缺失值
      df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
      
      # 默认为以行为单位剔除
      df.dropna()
      # 以列为单位剔除
      df.dropna(axis='columns')
      
      # 删除空白行
      df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
      
      # 所有为nan时候才剔除
      df.dropna(how='all')
      df.dropna(how='any')
      
  • 数据查重

    import pandas as pd
    
    # 创建一个示例DataFrame
    data = {
        '姓名': ['张三', '李四', '王五', '赵六', '张三'],
        '课程': ['数学', '数学', '英语', '物理', '数学'],
        '开设': ['可以', '可以', '可以', '不感兴趣', '可以'],
        '成绩': [88, 92, 85, 91, 93]
    }
    df = pd.DataFrame(data)
    
    # 标识出重复的行
    # 标识出重复行的意义在于进一步检査重复原因,以便将可能的错误
    # 数据加以修改
    # Duplicated
    df['dup'] = df.duplicated(['课程', '开设'], keep=False)
    
    # 利用索引进行重复行标识
    # df.index.duplicated()
    df2 = df.set_index ( ['课程','开设'] )
    df2.index.duplicated ()
    
    # 直接删除重复的行
    # drop_duplicates (
    #  subset=“ ”按照指定的行逬行去重
    # keep='first' 、 'last' 、 False 是否直接删除有重复的所有记录
    # )
    df. drop_duplicates ( ['课程', '开设' ] )
    df. drop_duplicates ( ['课程', '开设' ] , keep= False )
    
    # 利用査重标识结果直接删除
    # df[~df.duplicated( )]
    df[~df . duplicated ( ['课程', '开设' ] )]
    

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

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

相关文章

最近火爆的GraphRAG是什么?真的那么有用吗?

最近,微软提出的GraphRAG项目引起了广泛关注。那么,GraphRAG究竟是什么?它真的那么实用吗?本文将为您详细解读GraphRAG的概念及其应用。 什么是传统的RAG? 📚 在深入了解GraphRAG之前,我们首先…

掌握AJAX技术:从基础到实战

文章目录 **引言****1. 什么是AJAX?****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战:创建一个动态表单****8. AJAX中的事…

Python 解决 ImportError: cannot import name ‘example’

Python 解决 ImportError: cannot import name ‘example’ 在Python编程的广阔天地中,ImportError: cannot import name example 是一个令人头疼但又常见的错误。当你试图从某个模块中导入一个不存在的名称时,这个错误就会悄然降临。本文将带你深入探索…

AI推理硬件成本分析:AMD Instinct MI300X与Nvidia GPU比较

随着AI模型训练成本的上升,人们越来越关注推理硬件的成本,尤其是在需要低延迟响应的应用中。Transformer模型需要强大的硬件支持,例如200毫秒以下的响应时间。Artificial Analysis最近分析了AI模型性能和定价,特别指出AMD的“Anta…

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…

跟着动脑学院学习Android 开发基础

跟着动脑学院up主学习Android开发,记录学习笔记 2022 最新 Android 基础教程,从开发入门到项目实战,看它就够了,更新中_哔哩哔哩_bilibili (弱弱地说一句,绝大部分内容都是up主为我们准备好的资料里摘抄下…

机器学习 | 评估原理——模型评估与交叉验证

Hi,大家好,我是半亩花海。学完分类算法原理的知识,我们进入评估相关知识的学习,继续更新《白话机器学习的数学》这本书的学习笔记,在此分享模型评估与交叉验证相关评估原理。本章的基于前几节已建立的模型进行评估知识…

【C语言】Linux 飞翔的小鸟

【C语言】Linux 飞翔的小鸟 零、环境部署 安装Ncurses库 sudo apt-get install libncurses5-dev壹、编写代码 代码如下&#xff1a; bird.c #include<stdio.h> #include<time.h> #include<stdlib.h> #include<signal.h> #include<curses.h>…

LeetCode:相同的树(C语言)

1、问题概述&#xff1a;给2个二叉树的根节点p和q&#xff0c;如果2个树在结构和数值上都相同才为true&#xff0c;否则为false 2、示例 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;p [1,2], q […

做知识付费项目还能做吗?知识付费副业项目如何做?能挣多少钱?

hello,我是阿磊&#xff0c;一个20年的码农&#xff0c;6年前代码写不动了&#xff0c;转型专职做副业项目研究&#xff0c;为劳苦大众深度挖掘互联网副业项目&#xff0c;共同富裕。 现在做知识付费项目还能做吗&#xff1f; 互联网虚拟资源项目我一直在做&#xff0c;做了有…

AI绘画模型之:UNet、Imagen 与 DeepFloyd IF

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

spring boot(学习笔记第十五课)

spring boot(学习笔记第十五课) Spring boot的websocket(广播) 学习内容&#xff1a; Spring boot的websocket&#xff08;广播&#xff09; 1. Spring boot的websocket&#xff08;广播&#xff09; 回顾下web server的进化 第一代Web程序&#xff0c;使用整体页面刷新技术…

GPT-4o mini- 开发者的新宠儿

在人工智能的浪潮中,一颗新星正在冉冉升起。OpenAI最新发布的GPT-4o mini模型以其惊人的性能和极具竞争力的价格,正在成为开发者们的新宠儿。作为一名大数据开发者,我深深被这个"迄今为止最具成本效益的小模型"所吸引。让我们一起探索GPT-4o mini的魅力,看看它如何改…

一些问题 7/28

get post可以public吗 在Java Servlet中&#xff0c;doGet()和doPost()方法的访问修饰符通常是public&#xff0c;因为这些方法需要被Servlet容器&#xff08;如Tomcat&#xff09;调用。 如果将这些方法声明为private或protected&#xff0c;Servlet容器将无法访问它们&…

RocketMQ Server Windows安装

RocketMQ阿里开发 开源给apache 官网:RocketMQ 官方网站 | RocketMQ 下载后解压 配置环境变量 注意启动顺序 双击 注意 4.9.0这个版本必须 jdk 8 高了用不了 namesrv是注册中心的作用 broke是核心用于接收生产者消息 存储消息 发送给消费者消息 类似DubboZookeeper…

C++ 绘制画布标尺

目标 关键代码 CRulerDrawer::CRulerDrawer(QPainter& painter, QRect rect, int scalePercent): m_painter(painter), m_rect(rect), m_scalePercent(scalePercent) {m_palette qApp->palette();m_scaleUnitSize PixelRuler::Instance()->GetScaleUnitSize(); }vo…

【JS|第22期】深入理解跨域

日期&#xff1a;2024年7月6日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

Vue开发环境搭建

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II VUE项目的基础配置2.1 制定不同的环境配置2.2 正式环境隐藏日志2.3 vscode常用插件引言 开发工具: node.js 、npm 开发编辑器:vscode 开发框架:VUE I 安装NVM…

react中zuStand状态管理工具使用

一、zuStand的基本使用 1.安装工具 npm install zustand 2.新建文件 在src下新建store文件夹&#xff0c;在store文件夹下新建zuStand.js文件 3.配置zuStand.js // 1.引入创建方法 import { create } from "zustand";// 2.创建store const useStore create((s…

未来不会使用 AI 的人真的会被淘汰吗?

AI 是今年大火的一个话题&#xff0c;随着 ChatGPT 之类的一系列大模型开始流行以后&#xff0c;有不少的培训机构宣称这样的口号: “未来不会使用 AI 的人将会被淘汰”。我觉得这个观点本身并没有错&#xff0c;但是关键在于那些培训机构出于自身的利益&#xff0c;故意忽略了…