Pandas基础08(分箱操作/时间序列/画图)

3.8.1 Pandas分箱操作

数据分箱(Binning) 是一种数据预处理方法,用于将连续型变量的数值范围分割成若干个区间或“箱”(bins),将数据按照这些区间进行分类,从而转换为离散型变量。这种方法常用于将数据的变化范围缩小,使其更加适合某些分析或模型算法的处理,或通过减少异常值的影响来提高模型的稳定性。

  • 等距分箱操作

将数据的取值范围等分为若干个区间,区间的宽度相等。例如,将数据范围从0到100分为5个区间,每个区间的宽度为20。

# 等距分箱
x=pd.cut(x=df["Chinese"], #要做分箱的数据bins=4, #分箱的数目right=True, #默认左闭右开labels=["差劲","一般","良好","优秀",] #各箱的名称
)
# [(11.92, 32.0] < (32.0, 52.0] < (52.0, 72.0] < (72.0, 92.0]]
# ['差劲' < '一般' < '良好' < '优秀']
x.value_counts()
"""
Chinese
一般    3
差劲    2
优秀    2
良好    1
"""
  • 等频分箱操作

将数据分成若干个区间,使每个区间中包含相同数量的数据点。

# 等频分箱
x=pd.qcut(x=df["Chinese"], #要做分箱的数据q=4, #分箱的数目,使得每个箱分得的元素个数基本相同labels=["差劲","一般","良好","优秀",] #各箱的名称
)
# [(11.999, 35.0] < (35.0, 41.5] < (41.5, 66.5] < (66.5, 92.0]]
# ['差劲' < '一般' < '良好' < '优秀']
x.value_counts()
"""
Chinese
差劲    2
一般    2
良好    2
优秀    2
"""
3.8.2 Pandas时间序列

在数据科学和分析领域,时间序列数据是一个非常重要的组成部分。无论是在金融、气象还是其他领域,时间序列数据的处理和分析都非常常见。Pandas库为时间序列数据提供了强大的支持,使得处理和分析这些数据变得简单高效。本文将带你通过Pandas的一些时间序列功能,帮助你更好地理解如何处理、转换和操作时间序列数据。

  • 获取时间数据
pd.Timestamp("2025-02-01") #时刻数据
pd.Period("2025-02-01", freq='D') #时期数据:D日 M月 Y年
  • 批量生成时间数据
pd.date_range("2025-02-01", periods=4, freq='D') #生成时刻数据:periods是生成的数量,freq是按照日/月/年进行生成
pd.period_range("2025-02-01",periods=4, freq='D') #生成时期数据
  • 时间的转换
# 1.to_datetime将时间转换为Timestamp类型
pd.to_datetime("2025.2.1")
pd.to_datetime("2025-02-01")
pd.to_datetime("2025/2/1")
pd.to_datetime("1/2/2025")
# 2.将时间戳转换为时间Timestamp类型
pd.to_datetime(1809459200, unit='s')
  • 时间差
date = pd.to_datetime("2025.2.1")
date + pd.DateOffset(days=6)
date + pd.DateOffset(months=6)
date + pd.DateOffset(years=6)
  • 时间索引与切片
index = pd.date_range("2025-02-01", periods=100, freq='D')
ts = pd.Series(np.random.randint(0, 10, size=(100,)), index=index)
ts['2025-02-01'] #具体日期
ts['2025-02'] #2月份
ts['2025'] #2025年
ts['2025-02-01':'2025-03-25'] #时间范围切片
  • 属性
ts.index 
ts.index.year #获取所有年份
ts.index.month #获取所有月份 
ts.index.day #获取所有日
  • 数据移动
index = pd.date_range("2025-02-01", periods=100, freq='D')ts = pd.Series(np.random.randint(0, 10, size=(100,)), index=index)
ts.shift(periods=1) #向下移动一位
ts.shift(periods=-2) #向上移动两位
  • 频率转换
ts.asfreq(pd.tseries.offsets.Week())#将频率转换成周
ts.asfreq(pd.tseries.offsets.MonthEnd())#将频率转换成月
ts.asfreq(pd.tseries.offsets.YearEnd())#将频率转换成年
ts.asfreq(pd.tseries.offsets.Hour(), fill_value=0)#将频率转换成小时,空白处用0填充
  • 重采样

重采样通常是指对时间序列数据进行重新采样的过程,尤其是在使用 pandas 库时。重采样可以用于改变数据的频率,向上采样或向下采样数据。

  • 向下采样:将数据从高频率的时间序列转变为低频率,比如从小时数据转换为日数据。

  • 向上采样:将数据从低频率的时间序列转换为高频率,比如从日数据转换为小时数据。

# 对Series进行重采样
index = pd.date_range("2025-02-01", periods=100, freq='D')
ts = pd.Series(np.random.randint(0, 10, size=(100,)), index=index)
ts.resample("2D").sum() #每两天的数进行相加
ts.resample("1ME").sum() #每个月的数进行相加
ts.resample("3ME").sum() #每个季度的数进行相加
# 对DataFrame进行重采样
df = pd.DataFrame({"price":np.random.randint(0, 100, size=(100,)),"time":pd.date_range("2025-02-01", periods=100, freq='D')
})
#rule指定聚合的方式,on指定聚合的列名
df.resample(rule="ME", on="time").sum() #求每个月的价格总合
3.8.3 Pandas绘图
  • 折线图

通过plot()函数绘制折线图

# Series绘制折线图
s = pd.Series(np.arange(0, 2*np.pi, 0.01))
np.sin(s).plot() #DataFrame绘制折线图
df = pd.DataFrame(np.random.randint(1, 100, (4,3)), index=["zhangsan", "lisi", "wangwu", "zhouliu"], columns=["Chinese", "Math", "English"])
df.plot()
  • 柱状图和条形图
df.plot(kind="bar")#柱状图方法1
df.plot.bar()#柱状图方法2
df.plot.bar(stacked=True) #堆叠类型的柱状图
df.plot.barh()#水平柱状图(条形图)
  • 直方图

柱高表示数据的频数,柱宽表示各组数据的组距

#参数bins可以设置直方图方柱的个数上限,越大柱宽越小,数据分组越细致
#bins表示分的组数:每组的范围是(max-min)/bins
s=pd.Series([1,1,1,1,2,2,3,3,3,3,3,4,4,5,6,6,6])
s.plot(kind='hist')
#设置density参数为True,可以把频数转换为概率
s.plot(kind='hist', density=True)
#添加kde图
s.plot(kind='hist')
s.plot(kind='kde')
  • 饼图
# 画一列的饼图
# kind='pie':表示饼图
# autopct='%.1f%%':在图中展示.1f%
df['A'].plot(kind='pie', autopct='%.1f%%')# 画所有列的饼图
# subplots=True:画出所有子图
df.plot.pie(subplots=True, autopct='%.1f%%')
  • 散点图
# 描述两列之间的关系
data=np.random.randn(1000,2)
df=pd.DataFrame(data, columns=['A', 'B'])
df.plot(kind="scatter", x='A', y='B')#x为A列,y为B列

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

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

相关文章

C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)

Made By 于子轩&#xff0c;2025.2.2 不管是使用System.IO命名空间下的File类来创建快捷方式文件&#xff0c;或是使用Windows Script Host对象创建快捷方式&#xff0c;亦或是使用Shell32对象创建快捷方式&#xff0c;都对用户很不友好&#xff0c;今天小编为大家带来一种全新…

国产编辑器EverEdit - 输出窗口

1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果&#xff0c;主要包括&#xff1a; 查找类&#xff1a;查找全部&#xff0c;筛选等待操作&#xff0c;可以把查找结果打印到输出窗口中&#xff1b; 程序类&#xff1a;在执行外部程序时(如&#xff1a;命令窗…

Vue-data数据

目录 一、Vue中的data数据是什么&#xff1f;二、data支持的数据类型有哪些&#xff1f; 一、Vue中的data数据是什么&#xff1f; Vue中用到的数据定义在data中。 二、data支持的数据类型有哪些&#xff1f; data中可以写复杂类型的数据&#xff0c;渲染复杂类型数据时只要遵…

02.03 递归运算

使用递归求出 1 1/3 -1/5 1/7 - 1/9 ... 1/n的值。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #inc…

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

100 ,【8】 buuctf web [蓝帽杯 2021]One Pointer PHP(别看)

进入靶场 没提示&#xff0c;去看源代码。 user.php <?php // 定义一个名为 User 的类&#xff0c;该类可用于表示用户相关信息或执行与用户有关的操作 class User{// 声明一个公共属性 $count&#xff0c;可在类的内部和外部直接访问// 这个属性可能用于记录与用户相关…

巧妙利用数据结构优化部门查询

目录 一、出现的问题 部门树接口超时 二、问题分析 源代码分析 三、解决方案 具体实现思路 四、优化的效果 一、出现的问题 部门树接口超时 无论是在A项目还是在B项目中&#xff0c;都存在类似的页面&#xff0c;其实就是一个部门列表或者叫组织列表。 从页面的展示形式…

QT简单实现验证码(字符)

0&#xff09; 运行结果 1&#xff09; 生成随机字符串 Qt主要通过QRandomGenerator类来生成随机数。在此之前的版本中&#xff0c;qrand()函数也常被使用&#xff0c;但从Qt 5.10起&#xff0c;推荐使用更现代化的QRandomGenerator类。 在头文件添加void generateRandomNumb…

JavaFX - 3D 形状

在前面的章节中&#xff0c;我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外&#xff0c;我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常&#xff0c;3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

深入理解开放寻址法中的三种探测序列

一、引言 开放寻址法是解决散列表中冲突的一种重要方法&#xff0c;当发生冲突&#xff08;即两个不同的键通过散列函数计算得到相同的散列值&#xff09;时&#xff0c;它会在散列表中寻找下一个可用的存储位置。而探测序列就是用于确定在发生冲突后&#xff0c;依次尝试哪些…

【双指针题目】

双指针 美丽区间&#xff08;滑动窗口&#xff09;合并数列&#xff08;双指针的应用&#xff09;等腰三角形全部所有的子序列 美丽区间&#xff08;滑动窗口&#xff09; 美丽区间 滑动窗口模板&#xff1a; int left 0, right 0;while (right < nums.size()) {// 增大…

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…

go-zero学习笔记(三)

利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释&#xff0c;请使用 C/C 样式的 // 和 /* ... */…

【25考研】南开软件考研复试复习重点!

一、复试内容 复试采取现场复试的方式。复试分为笔试、机试和面试三部分。三部分合计100分&#xff0c;其中笔试成绩占30%、机试成绩占30%、面试成绩占40%。 1.笔试&#xff1a;专业综合基础测试 考核方式&#xff1a;闭卷考试&#xff0c;时长为90分钟。 笔试考查内容范围…

【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】

题目 代码&#xff08;只给出树状数组的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…

012-51单片机CLD1602显示万年历+闹钟+农历+整点报时

1. 硬件设计 硬件是我自己设计的一个通用的51单片机开发平台&#xff0c;可以根据需要自行焊接模块&#xff0c;这是用立创EDA画的一个双层PCB板&#xff0c;所以模块都是插针式&#xff0c;不是表贴的。电路原理图在文末的链接里&#xff0c;PCB图暂时不选择开源。 B站上传的…

对象的实例化、内存布局与访问定位

一、创建对象的方式 二、创建对象的步骤: 一、判断对象对应的类是否加载、链接、初始化: 虚拟机遇到一条new指令&#xff0c;首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已经被加载、解析和初始化…

传输层协议 UDP 与 TCP

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 前置复盘&#x1f98b; 传输层&#x1f98b; 再谈端口号&#x1f98b; 端口号范围划分&#x1f98b; 认识知名端口号 (Well-Know Port Number) 二&#xf…

实验十一 Servlet(二)

实验十一 Servlet(二) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 改造实验10&#xff0c;引入数据库&#xff0c;创建用户表&#xff0c;包括用户名和密码&#xff1a;客户端通过login.jsp发出登录请求&#xff0c;请求…

服务SDK三方新版中央仓库和私服发布详解

预备信息Github仓库发布Gradle版本匹配Gradle项目构建全局变量定义Gradle项目Nexus仓库配置与发布过程Gradle项目发布至Sonatype中央仓库配置过程总结当我们在实现一个项目技术总结、工具类封装或SDK封装,通常是为了方便开发者使用特定服务或平台而提供的一组工具和API。您可能…