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

【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.xdnf.cn/news/14616.html

相关文章:

  • 【android bluetooth 协议分析 10】【AVRCP详解1】【PlaybackStateCompat类如何查看】
  • 系统性能优化-5 选择合适的锁
  • Golang单例实现
  • 如何将FPGA设计验证效率提升1000倍以上(1)
  • Vue 英雄列表搜索与排序功能实现
  • Python训练营-Day40-训练和测试的规范写法
  • 鸿蒙开发深入解析:Data Ability 数据共享机制全面指南
  • FPGA基础 -- Verilog 验证平台之 **cocotb 验证 `阶乘计算模块(factorial)` 的例子**
  • 攻防世界-MISC-MeowMeowMeow
  • PostgreSQL(知识片):查询/计算Selectivity(可选性)
  • 将两个mp4的文件合并在一起形成新的文件
  • 从0开始学习R语言--Day31--概率图模型
  • 【MV】编排8:基于时间线数据多层分段避免过度拟合特定歌曲
  • 《C++初阶之类和对象》【初始化列表 + 自定义类型转换 + static成员】
  • FunASR搭建语音识别服务和VAD检测
  • 飞算 JavaAI 插件炸场!一小时搭图书管理系统
  • Java并发编程中高效缓存设计的哲学
  • Word2Vec 原理是什么
  • vscode 插件
  • Java底层原理:深入理解JVM内存管理机制
  • C#图书管理系统笔记(残缺版)
  • SQLite3 在嵌入式系统中的应用指南
  • Apache SeaTunnel Spark引擎执行流程源码分析
  • Java SE - 图书管理系统模拟实现
  • 国产麒麟 安装可视化数据库软件DBeaver(图解)
  • 前端开发入门指南:掌握HTML基础
  • 【RK3568 嵌入式linux QT开发笔记】 二维码开源库 libqrencode 交叉静态编译和使用
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | DrinkWater(喝水记录组件)
  • DeepSeek中的提示库及其用法示例
  • 用于算法性能预测的 GNN 框架