Pandas03

Pandas01
Pandas02

文章目录

    • 内容回顾
    • 1 排序和统计函数
    • 2 缺失值处理
      • 2.1 认识缺失值
      • 2.2 缺失值处理- 删除
      • 2.3 缺失值处理- 填充
        • 非时序数据
        • 时序数据
    • 3 Pandas数据类型
      • 3.1 数值类型和字符串类型之间的转换
      • 3.2 日期时间类型
      • 3.3 日期时间索引
    • 4 分组聚合
      • 4.1 分组聚合的API使用
      • 4.2 分组聚合的代码说明
      • 4.3 自定义聚合函数
      • 5 数据的分箱(分桶)

内容回顾

数据读取保存

  • pd.read_xxx
  • df.to_XXX
  • index 是否保存

查询

  • query
  • loc/iloc属性 loc名称 iloc序号
  • series.isin([])

增加删除修改

  • df[‘新列名’]=新值/[]

  • df.insert()

  • df.drop()

    • axis =0 /1
    • inplace
  • df.drop_duplicates(subset=,keep=,inplace)

  • df.replace()

  • loc/iloc 定位到数据直接修改

  • apply

    • 先自己定义一个方法, 这个方法不是由我们来调用, 而是要交给apply方法 由这个方法来调用, 传给它的是函数对象

      def func(s)

      ​ return s

    • s.apply() 传入的是每一个值

    • df.apply( axis) 传入给自定义函数的是Series对象

index 和 columns 的修改

  • set_index()
  • reset_index()
  • 直接替换, 但是不能直接单独修改某一个索引, 单独修改某一个索引需要使用方法rename()

1 排序和统计函数

nlargest/nsmallest

sort_values 多字段排序

df.sort_values(['价格','面积'],ascending=[False,True])
# 多字段排序, by可以通过列表,传入多个字段,   
# ascending 也可以传入列表 分别指定每个字段的升序/降序的情况 升序降序列表长度需要和排序字段长度一致

corr() 计算相关性

df.corr(numeric_only=True)
#  相关系数  判断两列数据是否同增同减   [-1,1]
#  如果一个变量增大的时候, 另一个变量也跟一起增大 正相关  最大 1
#  如果一个变量增大的时候, 另一个变量减小 负相关         最小 -1
#  相关系数的绝对值 >0.7 强相关  0.3~0.7 具有相关性   0.3以下 弱相关  0附近 不相关

2 缺失值处理

2.1 认识缺失值

from numpy import NaN,NAN,nan

NaN和任何一个值都不相等 包括自己

不能通过 == 方式找到缺失值

NaN 是float 类型

加载包含缺失值的数据

df = pd.read_csv('C:/Develop/深圳42/data/city_day.csv',keep_default_na=False)
# 是否用默认的方式来加载空值, 默认加载成NaN 改成False 就会加载成空串
pd.read_csv('C:/Develop/深圳42/data/city_day.csv',na_values='0.0')
# na_values 可以指定某些特殊的值, 在加载数据的时候当作空值来对待

缺失值的识别

  • df.isnull() 缺失返回True 否则返回False
  • df.notnull() 和isnull 相反
df.isnull().sum() # 可以计算每一列缺失值的数量
df.isnull().sum()/df.shape[0] # 可以计算每一列缺失值的占比

2.2 缺失值处理- 删除

df2 = df.sample(10,random_state=5)
# sample 从数据中随机采样 n条数据, 这里传了10 取出10条, random_state 随机数种子, 如果这个值设置的是一样的, 运行多少次结果都相同, 这么做的目的是为了方便复现结果
df2.dropna()
#%%
df2.isnull().sum(1) # 计算每一行缺失值数量
#%%
df2.dropna(subset=['PM2.5','CO']) # 通过 subset 指定 去掉缺失值的时候只考虑 'PM2.5','CO'
df2.dropna(subset=['PM2.5','CO'],how='any') # how = any 有缺失就删除 可选all 都缺失才删除
df2.dropna(thresh=12)
# 设置阈值, 设置了每一行/列 非空元素的下限, 当每一行/列 非空值小于这个阈值时就会被删除

什么时候删除缺失值

  • 关键信息缺失 , 举例:用户ID 缺少, 订单ID
  • 某一列数据, 缺失值占比过高(50%), 也可以考虑删除
  • 有些时候, 数据的作用比较大的,暂时缺失值比较高, 可以考虑先观察这一列数, 可以通过运营手段, 降低缺失率

2.3 缺失值处理- 填充

非时序数据
  • 统计量来填充, 均值, 中位数 众数(类别型 可以用出现次数最多的) 业务的默认值
df2['PM2.5'].fillna(df2['PM2.5'].mean())
#%%
df2.fillna({'PM2.5':df2['PM2.5'].mean(),'PM10':df2['PM10'].mean()})
时序数据
  • 温度, 天气, 用电量, 个人存款金额, 个人贷款金额
  • 用前一个非空值, 和后一个非空值来进行填充
  • 也可以考虑线性插值
s1 = df['Xylene'][54:64] # 筛选部分数据
s1.fillna(method='bfill')
# bfill 用后面的非空值进行填充  ffill 用空值前面的非空值进行填充
s1.interpolate(method='linear')
# 线性插值 和空值相邻的两个非空值连线, 空值就从线上取值, 等差数列

3 Pandas数据类型

字符串 → Object

数值型 → int64 float64

类别型 → category 后面介绍

日期时间 → datetime timedelta

3.1 数值类型和字符串类型之间的转换

as_type 可以做类型的转换, 对类型没有限制

pd.to_numeric() 把一列数据转换成数值类型

import pandas as pd
df = pd.read_csv('C:/Develop/深圳42/data/city_day.csv')
df.head()
#把数值型转换成字符串
df['NO'] = df['NO'].astype(object)
# 把它在转换回来,  都可以成功转换
df['NO'] = df['NO'].astype(float)
#
df2 = df.head().copy()
# 构造数据, 把部分数据改成字符串
df2.loc[::2,'NO'] = 'missing'
df2.info()
# 此时不能成功转换,  errors='ignore' 两个参数 ignore忽略, raise 抛异常
df2['NO'].astype(float,errors='ignore')
#%%
# 转换成数值型
pd.to_numeric(df2['NO'], errors='coerce')
# 有些时候, 应该整列都是数值的列, 由于采集/传输的原因, 导致有几值是字符串, 这会导致整列变成字符串类型, 后续计算会十分麻烦, 需要把这一列转换成数值类型
# 如果直接使用astype 要么报错, 要么不处理,此时可以使用 pd.to_numeric  可以指定errors参数为coerce 不能转换成数值的字符串会被处理成NaN

3.2 日期时间类型

加载数据的时候, 如果发现了有年月日时分秒这样的数据, 需要查看一下数据类型, 如果需要从年月日时分秒这样的数据中提取出日期时间相关信息, 需要转换成datetime类型

  • 加载的时候直接某一列为日期时间类型
df = pd.read_csv('C:/Develop/深圳42/data/city_day.csv',parse_dates=['Date'])

parse_dates

  • 通过pd.to_datetime进行转换
df['Date'] = pd.to_datetime(df['Date'])
  • 数据如果是来自数据库, xlsx excel文件, 有可能不需要特殊处理, 直接就是日期时间类型, 如果是从CSV文件读取出来, 默认读出来的日期时间的数据都是object

跟日期时间相关的三种类型

  • datetime64
df['Date'] = pd.to_datetime(df['Date'])

年月日 这样的列,转换之后得到的就是datetime64[ns] 这种类型

从日期时间类型中, 提取出相关的不同时间维度, df[‘Date’].dt.XXX

  • year, month月 day日…
  • timestamp 时间戳
df['Date'].max()

Timestamp(‘2020-07-01 00:00:00’)

  • Timedelta64
df['Date']-df['Date'].min()

在这里插入图片描述

3.3 日期时间索引

DatetimeIndex 和 TimedeltaIndex 是两种日期时间索引

把datetime64类型的一列数据, 设置为索引以后, 就是DatetimeIndex , 我们对索引排序,排序以后就可以按日期时间维度进行选取子集,做数据切片

df.set_index('Date', inplace=True) # 设置为日期时间索引
#%%
df.sort_index(inplace=True) # 对索引进行排序
#%%
df.loc['2018'] # 筛选2018年的数据
# 
df.loc['2018-06-05']# 筛选2018年6月5日的数据
df.loc['2018-06-05':'2018-06-15']

把Timedelta64类型的一列数据, 设置为索引以后, 就是TimedeltaIndex对索引排序,排序以后就可以按时间差值的维度进行选取子集,做数据切片

df['time_delta']=df['Date']-df['Date'].min()
#%%
df.set_index('time_delta', inplace=True)
#%%
df.loc['10 days']
df.loc['20 days':'30 days']

4 分组聚合

4.1 分组聚合的API使用

df.groupby('区域').mean() # 区域字段分组,只对数值列计算平均值

在高版本 比如2.0 这种写法会有错, 可以传入numeric_only = True

df.groupby('区域')['价格'].mean()   # 区域字段分组,对价格计算平均值

df.groupby(分组字段)[聚合字段].聚合函数()

如果对一个字段按一种方式进行聚合, 这种写法就可以了

df.groupby('区域')[['面积','价格']].agg(['mean','median'])

如果需要对多个字段进行聚合, 需要[] 传入列表

同时计算多个聚合函数需要调用agg方法 ,传入列表

df.groupby('区域').agg({'面积':'mean','价格':'median'})

不同字段不同方式进行聚合, agg里面传入字典, key聚合字段,value 聚合函数

多字段分组/多字段聚合

groupby([‘字段1’,'字段2])

  • 返回复合索引 MultiIndex

对一个字段做多种不同的聚合计算, 返回的结果column是MutiIndex

  • 复合索引 列表里套元组, 取数的时候, 可以传元组中的第1个元素, 也可以直接传入元组[()]

groupby分组聚合之后, 结果默认会把分组字段作为结果的索引, 如果不想把分组字段作为结果的索引

  • df.groupby(‘区域’,as_index = False)
  • 对结果reset_index()

4.2 分组聚合的代码说明

df.groupby('区域')['价格'].mean()

上面的代码可以拆分成三句

df_groupby = df.groupby('区域') # 得到的是一个dataframegroupby对象

df_groupby.groups 返回一个字段 {‘区域不同的取值’:[这个值对应的行索引]}

在这里插入图片描述

df_groupby.get_group(‘CBD租房’) 获取CBD租房 对应的DataFrame数据

s_groupby = df_groupby['价格'] # 得到的是一个seriesgroupby对象

从dataframegroupby对象的每一组中, 获取了[‘价格列’], 组层了seriesgroupby对象

s_groupby.mean()

每一组, 对价格的数据求一下平均, 有多少组算多少次, 把结果汇总起来

4.3 自定义聚合函数

当常规的聚合函数不能满足业务需求的时候, 需要自己来写聚合的逻辑, 就是自定义聚合函数

  • 举例子, 按照区域进行分组, 计算不同区域的平均房租 计算价格均值的时候, 需要过滤掉价格低于3000的
def func(s):print(s)print(type(s))    print('=====================')# 每一组选出价格>3000的 对这部分求平均result = s[s<12000].mean()return result
## 自定义聚合函数
df.groupby(['区域'])['价格'].agg(func)

自定义聚合函数, 一定要有返回值, 返回的是一个值, 不能是多个值

分组聚合, 每组应该只有一个聚合结果

5 数据的分箱(分桶)

有很多场景, 我们需要把连续型取值的数据列, 变成类别型

  • 年龄这一列 → 年龄段( 未成年, 青年, 中年, 老年)
  • 收入这一列 → 收入档次 (低收入,中收入, 高收入, 超高收入)

类似上面提到的场景, 就可以使用pd.cut() 对数据进行分箱处理

pd.cut(df['价格'],bins=3)

bins = 3 分成3组(3箱)

此时划分策略, 每一组(每一箱) 上边界 和下边界之间的差值, 尽可能相等 (等距分箱)

pd.cut(df['价格'],bins=[0,4500,8500,210000],labels=['低','中','高'])

第一个参数 df[‘价格’] 要被分箱/分组的数据列(Series)

bins 传入一个列表, 列表里的值, 从小到大, 定义了每一箱的边界

  • 做开右闭合 ,需要注意, 最左边的下限要小于数据中的最小值, 否则会漏掉, 漏掉的数据会变成NaN

labels 如果不传, 分箱之后, 每一箱的取值会用这一箱的边界(下限,上限] 来替代, 我们传入一个列表,可以自己定义分箱之后每一箱的取值

若有错误与不足请指出,关注DPT一起进步吧!!!

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

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

相关文章

平凉一窝丝:丝丝缕缕的舌尖风情

在平凉的美食版图中&#xff0c;食家巷一窝丝以其独特的工艺和诱人的口感&#xff0c;占据着重要的一席之地&#xff0c;成为了平凉人心目中的经典美食之一。从外观上看&#xff0c;平凉食家巷一窝丝如同一盘精心雕琢的金丝&#xff0c;根根细丝紧密盘绕&#xff0c;整齐而美观…

Wordly Wise 3000 国际背单词01 介绍 + 测词汇量

&#x1f4da; Wordly Wise 3000 国际背单词01 介绍 测词汇量 &#x1f31f; 大家好&#xff01;我们正式启动背Wordly Wise 3000单词&#xff0c;旨在利用国际资源和科学的学练方法&#xff0c;帮助大家更得效地坚持学练单词。我们将通过图文和Video等多种形式与大家分享经验…

C++进阶重点知识(一)|智能指针|右值|lambda|STL|正则表达式

目录 1智能指针1.shared_ptr1.1 shared_ptr的基本用法使用shared_ptr要注意的问题运用 2.unique_ptr独占的智能指针示例&#xff1a;管理动态内存 3.weak_ptr弱引用的智能指针weak_ptr的基本用法lock 的作用&#xff1a;weak_ptr返回this指针weak_ptr解决循环引用问题weak_ptr使…

计算机网络 (9)数据链路层

前言 计算机网络中的数据链路层&#xff08;Data Link Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;参考模型中的第二层&#xff0c;位于物理层和网络层之间。它在物理层提供的服务基础上&#xff0c;负责在相邻节点之间建立、维护和终止链路&#xff0c;确保数…

【Elasticsearch】DSL查询文档

目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 …

国内独立开发者案例及免费送独立开发蓝图书

独立开发者在国内越来越受到关注&#xff0c;他们追求的是一种自由且自给自足的工作状态。 送这个&#xff1a; 少楠light&#xff08;Flomo、小报童、如果相机&#xff09;&#xff1a;他们是独立开发者的典范&#xff0c;不仅开发了多款产品&#xff0c;还坚信“剩者为王”…

Browser Use:AI智能体自动化操作浏览器的开源工具

Browser Use:AI智能体自动化操作浏览器的开源工具 Browser Use 简介1. 安装所需依赖2. 生成openai密钥3. 编写代码4. 运行代码5. 部署与优化5.1 部署AI代理5.2 优化与扩展总结Browser Use 简介 browser-use是一个Python库,它能够帮助我们将AI代理与浏览器自动化操作结合起来;…

园区网综合拓扑实验

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan&#xff08;本实验未使用&#xff09; 4、上层…

为什么深度学习和神经网络要使用 GPU?

为什么深度学习和神经网络要使用 GPU&#xff1f; 本篇文章的目标是帮助初学者了解 CUDA 是什么&#xff0c;以及它如何与 PyTorch 配合使用&#xff0c;更重要的是&#xff0c;我们为何在神经网络编程中使用 GPU。 图形处理单元 (GPU) 要了解 CUDA&#xff0c;我们需要对图…

WebRTC Simulcast 大小流介绍与优化实践

Simulcast 是 WebRTC 中的一种标准化技术 &#xff0c;简称大小流。通过 Simulcast&#xff0c;客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码&#xff0c;带宽较多的拉流端可以接收较高质量的视频流&#xff0c;带宽有限的拉流端则可以接收较…

R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别

全文链接&#xff1a;https://tecdat.cn/?p38667 摘要&#xff1a;在母婴暴露于空气污染对儿童健康影响的研究中&#xff0c;常需对孕期暴露情况与健康结果进行回归分析。分布滞后非线性模型&#xff08;DLNM&#xff09;是一种常用于估计暴露 - 时间 - 响应函数的统计方法&am…

【从零开始入门unity游戏开发之——C#篇35】C#自定义类实现Sort自定义排序

文章目录 一、List<T>自带的排序方法1、List<T>调用Sort()排序2、 能够使用 Sort() 方法进行排序的本质 二、自定义类的排序1、通过实现泛型IComparable<T> 接口&#xff08;1&#xff09;示例&#xff08;2&#xff09;直接调用 int 类型的 CompareTo 方法进…

【驱动开发】设备分类、设备号申请和注销,注册和移除字符设备,以及一个基本的内核驱动程序框架代码

一、Linux内核对设备的分类 Linux的文件种类 序号符号类型文件内容文件名原信息1-普通文件√√√2d目录文件√√√3p管道文件√√4s本地socket文件√√5l链接文件软链接有;硬链接相当于别名√√6c字符设备√√7b块设备√√设备类型 Linux内核按驱动程序实现模型框架的不同,…

【最新】沃德协会管理系统源码+uniapp前端+环境教程

一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0…

Linux-frp_0.61.1内网穿透的配置和使用

下载frp frp官网 https://gofrp.org/zh-cn/docs/setup/ frp安装包下载地址 https://github.com/fatedier/frp/releases?page1 下载之后在服务器上 解压 tar -zxvf frp_0.61.1_linux_amd64.tar.gztar&#xff1a;一个用于压缩和解压缩的工具。-z&#xff1a;表示使用 gzi…

apifox

请求头head 如果传json串的话&#xff0c;需要将Content-Type覆盖为application/json 请求体body 有一个场景&#xff1a;我先创建任务&#xff0c;返回值为任务id&#xff0c;接着我要去根据任务id 删除这个任务 如果创建任务api的返回值中&#xff0c;任务id是以数组/ 对象…

C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡

雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机&#xff1b;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…

从家谱的层级结构 - 组合模式(Composite Pattern)

组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite Pattern&#xff09;组合模式概述组合模式涉及的角色talk is cheap&#xff0c; show you my code总结 组合模式&#xff08;Composite Pattern&#xff09; 组合模式&#xff08;Composite…

基于 DINOv2 模型实现图搜图相似度检索任务

一、DINOv2 模型简介及使用 DINOv2是由Meta AI开发的第二代自监督视觉变换器模型&#xff0c;采用 Vision Transformer (ViT) 架构 。其核心特点是在无需人工标签的情况下&#xff0c;通过自监督学习技术&#xff0c;从海量无标注图像中学习有意义的视觉特征表示&#xff0c;类…

STM32高级 以太网通讯案例1:网络搭建(register代码)

需求描述 驱动W5500芯片&#xff0c;设置好IP&#xff0c;测试网络是否连通。 思考&#xff1a; 驱动W5500芯片是通过spi协议&#xff0c;所以和spi相关的有四个引脚&#xff0c;MOSI&#xff08;主出从入&#xff09;MISO&#xff08;主入从出&#xff09;SCK&#xff08;时…