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.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池

目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单&#xff0c;我们首先聊一聊线程池的定义&#xff1a; 线程池&#xff08;Thread Pool&#xff09; 是一种并发编程的设计模式&#xff0c;用于管理和复用多个线程…

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析&#xff08;PCA&#xff09;可以通过以下步骤进行&#xff1a; 标准化数据&#xff1a;首先&#xff0c;需要对数据进行标准化处理&#xff0c;确保每个特征的均值为 0&#xff0c;方差…

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()) {// 增大…

为什么命令“echo -e “\033[9;0]“ > /dev/tty0“能控制开发板上的LCD不熄屏?

为什么命令"echo -e “\033[9;0]” > /dev/tty0"能控制开发板上的LCD不熄屏&#xff1f; 在回答这个问题前请先阅读我之前写的与tty和终端有关的博文 https://blog.csdn.net/wenhao_ir/article/details/145431655 然后再来看这条命令的解释就要容易些了。 这条…

嵌入式八股文面试题(一)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 样式的 // 和 /* ... */…

Javascript代码库-jQuery入门

摘自千锋教育kerwin的js教程 jQuery 是一个前端库&#xff0c;也是一个方法库他里面封装着一些列的方法供我们使用我们常用的一些方法它里面都有&#xff0c;我们可以直接拿来使用就行了jQuery 之所以好用&#xff0c;很多人愿意使用&#xff0c;是因为他的几个优点太强大了 优…

【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站上传的…