使用Pandas的resample函数处理时间序列数据的技巧

简介: 使用Pandas的resample函数处理时间序列数据的技巧

640.jpg


时间序列数据在数据科学项目中很常见。通常,可能会对将时序数据重新采样到要分析数据的频率或从数据中汲取更多见解的频率感兴趣。

在本文中,我们将介绍一些使用Pandas resample()函数对时间序列数据进行重采样的示例。我们将介绍以下常见问题,并应帮助您开始使用时序数据操作。

  1. 下采样并执行聚合
  2. 使用自定义基数进行下采样
  3. 上采样和填充值
  4. 一个实际的例子


向下采样和执行聚合

下采样是将一个时间序列数据集重新采样到一个更大的时间框架。例如,从几分钟到几小时,从几天到几年。结果的行数将减少,并且可以使用mean()、min()、max()、sum()等聚合值。

让我们通过一个示例来了解它是如何工作的。

假设我们有一个关于销售的数据集。

df_sales=pd.read_csv(
'sales_data.csv',
parse_dates=['date'],
index_col=['date']
)


640.png

要获得每2小时添加的总销售额,只需使用resample()将DataFrame向下采样到2小时的容器中,并将落入容器中的时间戳的值相加。

df_sales.resample('2H').sum()

640.png

要执行多个聚合,我们可以向agg()方法传递一个聚合函数列表。

df_sales.resample('2H').agg(['min','max', 'sum'])

640.png

使用自定义基数向下采样

默认情况下,对于平均细分为1天/月/年的频率,聚合间隔的“原点”默认为0。所以2H频率的结果范围是00:00:00,02:00:00,04:00:00,…,22:00:00。

对于我们正在使用的销售数据,第一个记录的日期值为2017-01-02 09:02:03,因此将输出范围从09:00:00开始比从08:00开始更有意义。为此,我们可以使用参数base将聚合间隔的“原点”设置为不同的值,例如,set base=1,这样结果范围就可以从09:00:00开始。

df_sales.resample('2H', base=1).sum()

640.png

上采样和填充值

上采样是下采样的相反操作。它将时间序列数据重新采样到一个更小的时间框架。例如,从小时到分钟,从年到天。结果将增加行数,并且附加的行值默认为NaN。内置的方法ffill()和bfill()通常用于执行前向填充或后向填充来替代NaN。

让我们为演示创建一个DataFrame。

df=pd.DataFrame(
  { 'value': [1, 2, 3] },
index=pd.period_range(
'2012-01-01',
freq='A',
periods=3  )
)

640.png

按季度重新采样一年并向前填充值。前向填充方法ffill()将使用最后一个已知值来替换NaN。

df.resample('Q').ffill()

640.png

按季度重新采样一年并向后填充值。向后填充方法bfill()将使用下一个已知值来替换NaN。

df.resample('Q').bfill()

640.png

一个实际的例子

让我们看看如何使用Pandas resample()来处理一个现实世界的问题。

假设我们有两个数据集,一个是月销售额df_sales,另一个是价格df_price。df_price只有关于价格变化的记录。

640.png

我们想计算一下每个月的销售总额,下面是预期的产量。

640.png

这个计算中比较困难的部分是,我们需要检索每个月的价格,并将其合并到数据中,以便计算总价格。

一种简洁的解决方案是使用Pandas的resample()函数。一行代码可以检索每个月的价格。

步骤1:按月重新取样价格数据集,并向前填充值

df_price = df_price.resample('M').ffill()

通过调用resample('M')来按月重新采样给定的时间序列。在此之后,调用ffill()来转发填充值。你是不是有点困惑?查看下面的图片了解细节。

640.png

步骤2:结合结果并计算总销售额

df=pd.concat([df_sales, df_price], axis=1)
df['total_sales'] =df['num_sold'] *df['price']

使用参数axis=1的Pandas concat()函数水平组合df_sales和df_price。在此之后,可以使用元素方面的乘法df['num_sold'] * df['price']来计算总销售额。

通过执行上述语句,您应该得到如下输出:

640.png

结论

Pandas resample()函数是一个简单、强大、高效的函数,用于在频率转换期间执行重采样操作。

我希望本文能帮助您节省分析时间序列数据的时间。我建议您查看resample() API的文档,了解您可以做的其他事情。

感谢你的阅读。如果您对机器学习的实践方面感兴趣,请查看笔记本以获取源代码

https://github.com/BindiChen/machine-learning/blob/master/data-analysis/020-pandas-resample/pandas-resample.ipynb

目录
相关文章
|
2月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
432 0
|
7月前
|
数据采集 安全 数据挖掘
Pandas数据合并:10种高效连接技巧与常见问题
在数据分析中,数据合并是常见且关键的步骤。本文针对合并来自多个来源的数据集时可能遇到的问题,如列丢失、重复记录等,提供系统解决方案。基于对超1000个复杂数据集的分析经验,总结了10种关键技术,涵盖Pandas库中`merge`和`join`函数的使用方法。内容包括基本合并、左连接、右连接、外连接、基于索引连接、多键合并、数据拼接、交叉连接、后缀管理和合并验证等场景。通过实际案例与技术原理解析,帮助用户高效准确地完成数据整合任务,提升数据分析效率。
677 13
Pandas数据合并:10种高效连接技巧与常见问题
|
10月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
233 12
|
10月前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
222 17
|
10月前
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
296 8
|
2月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
275 0
|
4月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
393 0
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
333 1
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
359 0
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
302 2