当前位置: 首页 > news >正文

【Pandas】pandas DataFrame asfreq

Pandas2.2 DataFrame

Time Series-related

方法描述
DataFrame.asfreq(freq[, method, how, …])用于**将时间序列数据转换为指定频率(resample to frequency)**的方法

pandas.DataFrame.asfreq()

pandas.DataFrame.asfreq() 是一个用于**将时间序列数据转换为指定频率(resample to frequency)**的方法。它常用于处理 DatetimeIndex 类型的 DataFrame 或 Series,可以改变索引的时间频率,并在必要时插入缺失值或使用指定方法填充。


📌 方法签名
DataFrame.asfreq(freq, method=None, how=None, normalize=False, fill_value=None)

🔧 参数说明:
参数说明
freq目标频率字符串,如 'D'(天)、'W'(周)、'M'(月)、'Q'(季度)、'A'(年)等
method填充方法,可选 'backfill'/'bfill'(后向填充)或 'pad'/'ffill'(前向填充)
how对齐方式,可选 'start''end'(主要用于多周期对齐)
normalize是否将时间戳标准化为午夜时间(00:00:00),默认 False
fill_value用于填充新引入的 NaN 值,默认为 NaN

✅ 返回值
  • 返回一个新的 DataFrame 或 Series,其索引被调整为目标频率 freq
  • 原始数据不会被修改(除非使用 inplace=True);

🧪 示例代码及结果
示例 1:基本用法(按日频率转换)
import pandas as pd
import numpy as np# 创建一个时间序列 DataFrame
index = pd.date_range('2025-01-01', periods=4, freq='2D')  # 每两天一个数据点
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)print("Original DataFrame:")
print(df)
输出:
            value
2025-01-01     10
2025-01-03     20
2025-01-05     30
2025-01-07     40
# 转换为每日频率,不填充
df_daily = df.asfreq('D')
print("\nAfter .asfreq('D'):")
print(df_daily)
输出:
              value
2025-01-01    10.0
2025-01-02     NaN
2025-01-03    20.0
2025-01-04     NaN
2025-01-05    30.0
2025-01-06     NaN
2025-01-07    40.0

示例 2:使用前向填充(method='ffill'
df_daily_ffill = df.asfreq('D', method='ffill')
print("\nAfter .asfreq('D', method='ffill'):")
print(df_daily_ffill)
输出:
            value
2025-01-01     10
2025-01-02     10
2025-01-03     20
2025-01-04     20
2025-01-05     30
2025-01-06     30
2025-01-07     40

示例 3:使用后向填充(method='bfill'
df_daily_bfill = df.asfreq('D', method='bfill')
print("\nAfter .asfreq('D', method='bfill'):")
print(df_daily_bfill)
输出:
            value
2025-01-01     10
2025-01-02     20
2025-01-03     20
2025-01-04     30
2025-01-05     30
2025-01-06     40
2025-01-07     40

示例 4:设置填充数值(fill_value=0
df_daily_fill0 = df.asfreq('D', fill_value=0)
print("\nAfter .asfreq('D', fill_value=0):")
print(df_daily_fill0)
输出:
            value
2025-01-01     10
2025-01-02      0
2025-01-03     20
2025-01-04      0
2025-01-05     30
2025-01-06      0
2025-01-07     40

示例 5:标准化时间戳(normalize=True
df_normalize = df.asfreq('D', normalize=True)
print("\nAfter .asfreq('D', normalize=True):")
print(df_normalize)

此操作会将所有时间戳设为当天的 00:00:00,适用于统一时间格式。


🧠 应用场景
场景说明
时间序列对齐将不同频率的数据统一到相同频率进行比较
缺失值插补使用 method='ffill'method='bfill' 插入缺失数据
可视化准备统一时间间隔便于绘图
模型输入预处理确保时间序列是规则频率,便于建模
数据清洗标准化时间戳、填充空缺日期

⚠️ 注意事项
  • asfreq() 不会自动聚合数据(与 resample() 不同),仅重采样;
  • 若目标频率比原始频率更细粒度,会引入 NaN
  • 若目标频率比原始频率更粗粒度,则只保留原数据点;
  • methodfill_value 只能二选一,不能同时使用;
  • asfreq() 更适合已知数据点不变的情况下做频率转换。

✅ 对比 asfreq() vs resample()
特性asfreq()resample()
是否聚合
频率控制设置固定频率支持分组聚合
插值方式支持 ffill/bfill需要调用 .interpolate()
更适合时间序列对齐时间窗口统计分析
是否保留原始数据❌(需聚合)

如果你希望保持原始数据不变,仅调整时间频率并填充缺失值,那么 asfreq() 是非常合适的选择。

http://www.lqws.cn/news/515107.html

相关文章:

  • stm32week17+18+19+20
  • IP-GUARD外设以及网络禁用策略制定
  • ubuntu22.04可以执行sudo命令,但不在sudo组
  • 学习日记-spring-day37-6.25
  • NETCONF 典型工作流程
  • Spark 之 UT
  • 新能源汽车电池类型差异分析
  • 网络安全漏洞扫描是什么?如何识别目标进行扫描?
  • LangGraph--基础学习(Subgraphs 子图)
  • easy-caffeine一个简洁灵活易用基于caffeine的本地缓存框架
  • dovi交叉编译方法(编译libdovi.so)
  • PyTorch 入门之官方文档学习笔记(二)训练分类器
  • 利用Pytorch玩一玩文生图的HDGAN
  • 长尾关键词SEO优化高效策略
  • 微信小程序安卓手机输入框文字飘出输入框
  • 【服务器】服务器选型设计
  • Hadoop之HDFS
  • 【iOS】iOS崩溃总结
  • 一篇文章了解XML
  • 了解笔记本电脑制造:从品牌到代工厂的全产业链
  • Node.js-fs模块
  • linux内核中的链表实现
  • sentinel与seata组件在微服务中的基本作用
  • 微信点餐小程序—美食物
  • ICML 2025 | 低秩Swish网络:理论突破实现高效逼近,小模型性能媲美大网络
  • CSP - J 400分题单总结(洛谷题号)
  • 通过 HTML 子图和多尺度卷积 BERT 的双向融合实现可解释的恶意 URL 检测
  • xtrabackup 的工作原理 为什么不用停服?
  • Jenkins Pipeline 与 Python 脚本之间使用环境变量通信
  • IDEA高效开发指南:JRebel热部署