• pandas对时间序列中缺失值进行线性插值


    一、问题背景

    以二氧化碳浓度数据集为例,该时间序列在某些时间点上会有缺失值。

    # 读取数据集
    df = pd.read_csv('二氧化碳浓度.csv')
    # 将字段Datetime数据类型转换为日期类型
    df['datetime'] = pd.to_datetime(df['datetime'], format="%Y-%m-%d %H:%M:%S")
    df
    
    value datetime
    0 370 2022-04-13 00:11:00
    1 375 2022-04-13 00:42:00
    2 383 2022-04-13 01:11:00
    3 391 2022-04-13 01:41:00
    4 397 2022-04-13 02:11:00
    ... ... ...
    583 369 2022-04-23 22:12:00
    584 376 2022-04-23 22:41:00
    585 379 2022-04-23 23:11:00
    586 379 2022-04-23 23:12:00
    587 378 2022-04-23 23:41:00

    588 rows × 2 columns

    该数据集是没个半小时一条数据,若想要填充成10分钟一条数据,就需要进行线性插值。

    二、pandas解决方案

    下面我们需要生成一个辅助dataframe,命名为helper, 包含所有日期。

    # pd.date_range时间序列
    # 间隔十分钟
    helper = pd.DataFrame({'datetime': pd.date_range(start=df['datetime'].min(), end=df['datetime'].max(),freq='600s')})
    # helper = pd.DataFrame(helper).set_index('datetime')#将时间列变为索引
    

    helper:

    datetime
    0 2022-04-13 00:11:00
    1 2022-04-13 00:21:00
    2 2022-04-13 00:31:00
    3 2022-04-13 00:41:00
    4 2022-04-13 00:51:00
    ... ...
    1577 2022-04-23 23:01:00
    1578 2022-04-23 23:11:00
    1579 2022-04-23 23:21:00
    1580 2022-04-23 23:31:00
    1581 2022-04-23 23:41:00

    1582 rows × 1 columns

    然后再将helper和d join起来

    d = pd.merge(df, helper, on='datetime', how='outer').sort_values('datetime')
    

    最后一步就是插值了,直接用interpolate方法,method选择linear,线性插值。

    d['value'] = d['value'].interpolate(method='linear')
    
    value datetime
    0 370.0 2022-04-13 00:11:00
    588 NaN 2022-04-13 00:21:00
    589 NaN 2022-04-13 00:31:00
    590 NaN 2022-04-13 00:41:00
    1 375.0 2022-04-13 00:42:00
    ... ... ...
    585 379.0 2022-04-23 23:11:00
    586 379.0 2022-04-23 23:12:00
    1658 NaN 2022-04-23 23:21:00
    1659 NaN 2022-04-23 23:31:00
    587 378.0 2022-04-23 23:41:00

    1660 rows × 2 columns

    插值选择方法不止有线性,还可以是

    • nearest:最邻近插值法
    • zero:阶梯插值
    • slinear、linear:线性插值
    • quadratic、cubic:2、3阶B样条曲线插值(详情请参考官方文档)
  • 相关阅读:
    http基本概念和常见状态码
    JDK1.7 hashMap并发扩容死循环原理
    HashMap初始化数组原理,为什么是2的N次方?
    Rest接口加Http单向认证
    post和get乱码解决方法
    用迭代法实现二叉树的前、中、后序遍历
    搭建基于Zookeeper和solr的分布式搜索:solrcloud
    正向代理,反向代理及其作用
    二分查找向左或向右紧缩
    tcp四次挥手
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/16301327.html
Copyright © 2020-2023  润新知