• 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样条曲线插值(详情请参考官方文档)
  • 相关阅读:
    解决undefined reference to `__poll_chk@GLIBC_2.16' 错误
    交叉编译总结 libosscore.a libcurl.a libmysqlclient.a
    APUE环境配置
    UDT中epoll对CLOSE状态的处理
    查看ld搜索路径
    linux shell 比较文件夹内容 diff
    交互式makefile
    linux shell取文本最后一行
    linux 查看静态库,动态库是32位还是64位
    python学习day4之路
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/16301327.html
Copyright © 2020-2023  润新知