Pandas(九)--数据采样
目录
sample() 采样函数
随机采样
有条件采样
恒定速率采样
获取数据剩余部分
resample()采样函数
降采样
升采样
频率转换asfreq()
插值处理
sample() 采样函数
随机采样
随机抽样,是统计学中常用的一种方法,它可以帮助我们从大量的数据中快速地构建出一组数据分析模型。在 Pandas 中,如果想要对数据集进行随机抽样,需要使用 sample() 函数。
sample() 函数的语法格式如下:
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
参数说明如下表所示:
参数名称 | 参数说明 |
---|---|
n | 表示要抽取的行数。 |
frac | 表示抽取的比例,比如 frac=0.5,代表抽取总体数据的50%。 |
replace | 布尔值参数,表示是否以有放回抽样的方式进行选择,默认为 False,取出数据后不再放回。 |
weights | 可选参数,代表每个样本的权重值,参数值是字符串或者数组。 |
random_state | 可选参数,控制随机状态,默认为 None,表示随机数据不会重复;若为 1 表示会取得重复数据。 |
axis | 表示在哪个方向上抽取数据(axis=1 表示列/axis=0 表示行)。 |
该函数返回与数据集类型相同的新对象,相当于 numpy.random.choice()。构建示例数据:
- import pandas as pd
- dict = {'name':["Jack", "Tom", "Helen", "John"],'age': [28, 39, 34, 36],'score':[98,92,91,89]}
- info = pd.DataFrame(dict)
#默认随机选择两行
info.sample(n=2)
输出结果:name age score
2 Helen 34 91
0 Jack 28 98#随机选择两列
info.sample(n=2, axis=1)
输出结果:name age scoreage score
0 28 98
1 39 92
2 34 91
3 36 89#随机抽取3个数据
info['name'].sample(n=3)
输出结果:
1 Tom
3 John
2 Helen
Name: name, dtype: object#总体的50%
info.sample(frac=0.5, replace=True)
输出结果:name age score
2 Helen 34 91
0 Jack 28 98#age序列为权重值,并且允许重复数据出现
info.sample(n=2, weights='age', random_state=1)
输出结果:name age score
1 Tom 39 92
2 Helen 34 91
有条件采样
带条件采样允许仅提取满足给定条件的一些行。必须指定条件。
首先,满足列值sepal width (cm)
小于 3条件 的行:
condition = df['sepal width (cm)'] < 3
变量condition
是一系列大小相同的df
,包含True/False
,取决于行是否满足条件。
然后,检索与满足上述条件的行相关联的索引:
true_index = condition[condition == True].index
如果有 57 行满足条件,因此最多可以采样 57 行。
最后,通过sample()
函数可用于按如下条件进行采样:
subset = df[condition].sample(n = 10)
恒定速率采样
两个相邻样本之间的距离恒定
# 首先,指定费率
rate = 10
# 然后,提取样本,输出
subset = df[::rate]
获取数据剩余部分
提取数据集的子集后,还可以提取剩余部分。可以采用两种可能的解决方案来提取数据集的剩余部分。两种解决方案产生相同的结果。
第一种解决方案将提取的数据帧 ( subset
)的行删除到原始数据帧中df
,并将结果存储在新的数据帧中。这可以通过将要删除的索引列表传递给drop()
函数来实现:
remaining = df.drop(labels=subset.index)
第二种解决方案仅选择原始数据帧中的行,df
其中索引不在提取的数据帧的索引列表中subset
:
remaining = df[~df.index.isin(subset.index)]
resample()采样函数
也称时间序列采样和数据重采样,其将时间序列从一个频率转换至另一个频率的过程,它主要有两种实现方式:降采样和升采样,降采样指将高频率的数据转换为低频率,升采样则与其恰好相反。
方法 | 说明 |
---|---|
降采样 | 将高频率(间隔短)数据转换为低频率(间隔长)。 |
升采样 | 将低频率数据转换为高频率。 |
降采样
import pandas as pd
import numpy as np
rng = pd.date_range('1/1/2021',periods=100, freq='D')
ts = pd.Series(np.random.randn(len(rng)),index=rng)# 按天计数的频率转换为按月计数。
# 降采样后并聚合
ts.resample('M').mean()输出结果:
2021-01-31 0.046598
2021-02-28 0.000194
2021-03-31 -0.162896
2021-04-30 -0.395149
Freq: M, dtype: float64如果只想看到月份,那么您可以设置kind=period如下所示:
ts.resample('M',kind='period').mean()输出结果:
2021-01 0.046598
2021-02 0.000194
2021-03 -0.162896
2021-04 -0.395149
Freq: M, dtype: float64
升采样
import pandas as pd
import numpy as np
rng = pd.date_range('1/1/2021', periods=20, freq='3D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
print(ts.head())# 升采样是将低频率(时间间隔)转换为高频率
# 然后,使用asfreq()在原数据基础上实现频率转换
ts.resample('D').asfreq().head()输出结果:
升采样前:
2021-01-01 0.869743
2021-01-04 -1.105558
2021-01-07 -0.395761
2021-01-10 -1.163647
2021-01-13 0.367996
Freq: 3D, dtype: float64升采样后:
2021-01-01 0.869743
2021-01-02 NaN
2021-01-03 NaN
2021-01-04 -1.105558
2021-01-05 NaN
Freq: D, dtype: float64
频率转换asfreq()
该方法不仅能够实现频率转换,还可以保留原频率对应的数值,同时也可以单独使用,示例如下:
index = pd.date_range('1/1/2021', periods=6, freq='T')
series = pd.Series([0.0, None, 2.0, 3.0,4.0,5.0], index=index)
df = pd.DataFrame({'s':series})
print(df.asfreq("45s"))输出结果:s
2021-01-01 00:00:00 0.0
2021-01-01 00:00:45 NaN
2021-01-01 00:01:30 NaN
2021-01-01 00:02:15 NaN
2021-01-01 00:03:00 3.0
2021-01-01 00:03:45 NaN
2021-01-01 00:04:30 NaN
插值处理
从上述示例不难看出,升采样的结果会产生缺失值,那么就需要对缺失值进行处理,一般有以下几种处理方式:
方法 | 说明 |
---|---|
pad/ffill | 用前一个非缺失值去填充缺失值。 |
backfill/bfill | 用后一个非缺失值去填充缺失值。 |
interpolater('linear') | 线性插值方法。 |
fillna(value) | 指定一个值去替换缺失值。 |
# 下面使用插值方法处理 NaN 值,示例如下:
import pandas as pd
import numpy as np#创建时间序列数据
rng = pd.date_range('1/1/2021', periods=20, freq='3D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
print(ts.resample('D').asfreq().head())
输出结果:
2021-01-01 0.555580
2021-01-02 NaN
2021-01-03 NaN
2021-01-04 -0.079324
2021-01-05 NaN
Freq: D, dtype: float64#使用ffill处理缺失值
ts.resample('D').asfreq().ffill().head()
#插值处理,注意对比
2021-01-01 0.555580
2021-01-02 0.555580
2021-01-03 0.555580
2021-01-04 -0.079324
2021-01-05 -0.079324
Freq: D, dtype: float64
Pandas(九)--数据采样相关推荐
- Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)
文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...
- python sql脚本_使用Python SQL脚本进行数据采样
python sql脚本 介绍 (Introduction) The Python programming language is object oriented, easy to use and, ...
- 数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图
文章目录 数据分析 第七讲 pandas练习 数据的合并和分组聚合 一.pandas-DataFrame 练习1 对于这一组电影数据,如果我们想runtime(电影时长)的分布情况,应该如何呈现数据? ...
- 不平衡数据采样_过度采样不平衡数据的5种打击技术
不平衡数据采样 Imbalance data is a case where the classification dataset class has a skewed proportion. For ...
- Pandas resample数据重采样
Pandas resample数据重采样 数据重采样是将时间序列从一个频率转换至另一个频率的过程,它主要有两种实现方式,分别是降采样和升采样,降采样指将高频率的数据转换为低频率,升采样则与其恰好相反, ...
- Python打乱pandas的数据
Python打乱pandas的数据 最简单的方法就是采用pandas中自带的 sample这个方法. sample 函数本来是用来采样数据的,默认是打乱数据再采样,所以可以使用他来打乱数据. 样例: ...
- Pandas时序数据Time Series
深入浅出Pandas读书笔记 C14 Pandas时序数据Time Series 14.1 固定时间 14.1.1 时间的表示 时间戳Timestamp Pandas是在Python的datetime ...
- 联邦学习non-iid用户数据采样python实现
联邦学习non-iid用户数据采样python实现 问题描述 解决办法 问题描述 联邦学习non-iid用户数据采样 解决办法 直接上代码 import os from scipy.io import ...
- Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
Python使用pandas设置数据列中float数据类型的有效小数位数.抑制科学计数法 目录
- pandas删除数据行中的重复数据行、基于dataframe所有列删除重复行、基于特定数据列或者列的作何删除重复行、删除重复行并保留重复行中的最后一行、pandas删除所有重复行(不进行数据保留)
pandas删除数据行中的重复数据行.基于dataframe所有列删除重复行.基于特定数据列或者列的作何删除重复行.删除重复行并保留重复行中的最后一行.pandas删除所有重复行(不进行数据保留) 目 ...
最新文章
- python3软件怎么使用_Python3时间戳如何应用于数学计算?
- Win32窗体控件方法与消息
- 调试生产服务器– Eclipse和JBoss展示
- jeecg 导出的excel不能使用公式_微软:Excel公式是世界上使用最广泛的编程语言...
- 中职计算机高考总分是多少,高考理科总分是多少分
- python multiprocessing.Process 应用
- Android——手机系统重装的备忘笔记
- jQuery 第八课 —— 数据交互的升级
- 基于端到端深度强化学习的柔性作业车间调度问题研究
- v97fp5后, load问题诊断方法增强.
- Codeforces 448 D. Multiplication Table
- 慎重!物联网时代情趣用品真的适合联网么?
- 0. Unix / Linux操作系统介绍
- 雪亮工程整体解决方案
- 基于Xposed修改微信运动步数
- 三运放差分放大电路分析_三运放差动放大电路
- 【愚公系列】2022年10月 基于WPF的智能制造MES系统框架-简介
- 不同阶段,产品经理需要哪些能力?
- oracle语法基础
- 第一课:两种方法教你如何注册小程序账号
热门文章
- 计算机安装系统后鼠标无法使用,电脑重装系统后鼠标键盘不能用怎么办
- html代码 层次选择器,CSS样式类的实例代码(导航栏、分页、层级选择器)
- PAT A1119 Pre- and Post-order Traversals ——小楼一夜听春雨,深巷明朝卖杏花
- P1527,JZOJ 2908【集训队互测 2012】矩阵乘法(mat)
- mysql 分析函数 平均_mysql平均函数
- Virtualbox虚拟机Ubuntu联网
- PayPal开发前台生成订单和后台生成订单
- 笔记——H.264/AVC与H.265/HEVC基本总结
- 整理一波常用中文文字集合(去重的文字最多中文:20902个文字+ 常用的中文文字3900+)
- 面经_黑盒测试与白盒测试