Pandas中时间序列的处理大全

作者:FOR.GET 时间:2023-08-14 06:18:30 

目录
  • 一、时间序列数据的生成

  • 二、Pandas设置索引

  • 三、 时间序列数据的截取

  • 四、Pandas重复值处理

    • 4.1 查询是否有重复值

    • 4.2 去除重复值

  • 五、Pandas缺失值处理

    • 5.1 缺失值查询

  • 六、pandas统计计算方法

    • 七、Pandas数据重采样

      • 总结

        一、时间序列数据的生成

        pd.date_ranges生成时间序列

        • time格式:年月日分隔符号可以是"-","/",空格这三种格式(年月日、日月年、月日年都可以);时分秒只能用":"分隔,顺序只能是时分秒。

        • start:起始时间(time)

        • end:终止时间(time)

        • periods:期数(int),使用时只能出现start或者end,两者不能同时出现

        • freq:频率(numY,num年;numM,num月;numD,num日),详细参数见下表

        频率别名描述
        B工作日频率
        C自定义工作日频率
        D日历日频率
        W每周频率
        M每月最后一个日历日
        SM每半个月最后一个日历日(15日和月末)
        BM每月最后一个工作日
        CBM自定义每月最后一个工作日
        MS每月第一个日历日
        SMS每半月第一个日历日(第1和第15)
        BMS每月第一个工作日
        CBMS自定义每月第一个工作日
        Q每季度最后一个月的最后一个日历日
        BQ每季度最后一个月的最后一个工作日
        QS每季度最后一个月的第一个日历日
        BQS每季度最后一个月的第一个工作日
        A, Y每年的最后一个日历日
        BA, BY每年的最后一个工作日
        AS, YS每年的第一个日历日
        BAS, BYS每年的第一个工作日
        BH工作日按“时”计算频率
        H每小时频率
        T, min每分钟频率
        S每秒频率
        L, ms毫秒频率
        U, us微秒频率
        N纳秒频率

        import pandas as pd
        import numpy as np
        df = pd.DataFrame( data=np.random.randint(1,20,10),
                         index=pd.date_range(start="20/01/2021",periods=10,freq="M"),)
        print(df)

                     0
        2021-01-31   1
        2021-02-28   6
        2021-03-31  12
        2021-04-30   5
        2021-05-31   7
        2021-06-30   4
        2021-07-31   9
        2021-08-31   7
        2021-09-30  18
        2021-10-31  10

                     0
        count  10.00000
        mean    7.90000
        std     4.72464
        min     1.00000
        25%     5.25000
        50%     7.00000
        75%     9.75000
        max    18.00000

        二、Pandas设置索引

        创建时添加索引

        pd.DataFrame(...,index=[],...)

        df.set_index使用现有列设置索引

        • keys:列名,多个列用[name1,name2]

        • drop:设置升序(True)、降序(False)

        • inplace:替换原变量(True),不替换(False)


        df.set_index(["X"],inplace=True)
        df.set_index(["X","Y"],inplace=True)

        df.reset_index可以还原索引


        df.reset_index("X")

        三、 时间序列数据的截取

        df.truncate过滤数据

        • before:过滤之前的数据(time)

        • after:过滤之后的数据(time)

        • axis:列(columns),行(index)


        df.truncate(before="2021-5",after="2021-9")

                   0
        2021-05-31  7
        2021-06-30  4
        2021-07-31  9
        2021-08-31  7

        df.loc索引过滤


        df.loc["2021-5":]

                     0
        2021-05-31   7
        2021-06-30   4
        2021-07-31   9
        2021-08-31   7
        2021-09-30  18
        2021-10-31  10

        四、Pandas重复值处理

        4.1 查询是否有重复值

        duplicated()方法判断


        # 判断dataframe数据整行是否重复
        df.duplicated()
        # dataframe数据某列是否重复
        df.columns_name.duplicated()
        # 判断dataframe数据多列数据是否重复(多列组合查)
        df.duplicated(subset = ['n1','n2'])

        groupby().count()


        df.groupby('columns').count()>1

        4.2 去除重复值

        drop_duplicats参数说明:

        • 参数subset:用来指定特定的列,默认所有列

        • 参数keep:first和last表示是选择最前一项还是最后一项保留,默认first

        • 参数inplace:是直接在原来数据上修改还是保留一个副本,默认为False


        df.drop_duplicats(subset=['name1','name2'],keep='last',inplace=True)

        按照index索引去重


        df.index.duplicated(keep='last')

        五、Pandas缺失值处理

        5.1 缺失值查询

        df.info查询各列的信息


        df.info()

        # res
        <class 'pandas.core.frame.DataFrame'>
        Int64Index: 10 entries, 19 to 14
        Data columns (total 2 columns):
        #   Column  Non-Null Count  Dtype
        ---  ------  --------------  -----
        0   Y       10 non-null     int32
        1   Z       10 non-null     int32
        dtypes: int32(2)
        memory usage: 160.0 bytes

        df.isnull判断是否是空值


        df.isnull().any() # 筛选出缺失值的列
        df.isna().any() # 筛选出缺失值的列

        df.empty判断是否有空值


        df.empty

        5.2 缺失值填充

        ffill 空值取前面的值


        df.ffill()

        bfill 空值取后面的值


        df.bfill()

        fillna 指定值填充


        df.fillna(1)
        df.fillna({'A': 0, 'B': 1, 'C': 2, 'D': 3}) # 指定列填充

        interpolate 插值

        • df.interpolate(method=‘linear', axis=0, limit=None, inplace=False, limit_direction=‘forward', limit_area=None, downcast=None, **kwargs)

        • method参数解释

          • linear:忽略索引,线性等距插值

          • time:在以天或者更高频率的数据上插入给定的时间间隔长度数据

          • index, values:使用索引的实际数值

          • pad:使用现有值填写NaN

          • nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial:传递给scipy.interpolate.interp1d。这些方法使用索引的数值。polynomial和spline都要求您还指定一个顺序(int),例如 ,df.interpolate(method=‘polynomial', order=5)

          • krogh,piecewise_polynomial,spline,pchip,akima:包括类似名称的SciPy插值方法。

          • from_derivatives:指 scipy.interpolate.BPoly.from_derivatives,它替换了scipy 0.18中的'piecewise_polynomial'插值方法

        • axis : {0或'index',1或'columns',None},默认为None;沿轴进行interpolate。

        • limit: int;要填充的连续NaN的最大数量。必须大于0

        • inplace : bool,默认为False;如果可以,更新现有数据

        • limit_direction : {‘forward',‘backward',‘both'},默认为'forward';如果指定了限制,则将沿该方向填充连续的NaN

        • limit_area : {None, ‘inside', ‘outside'}, 默认为None;如果指定了限制,则连续的NaN将填充此限制。

        • None:无填充限制

        • inside:仅填充有效值包围的NaN

        • outside: 仅在有效值之外填充NaN


        dff.interpolate(method='polynomial',order=2)

        删除缺失值


        df.dropna(how='any')

        六、pandas统计计算方法

        方法说明
        count非NaN值的数理
        describe列计算统计汇总
        min、max最小值和最大值
        argmin、argmax最小值和最大值索引(int)
        idxmin、idxmax最小值和最大值索引
        quantile分位数([0,1],0.25下四分为)
        sum总和
        mean均值
        median0.5分位数,中位数
        mad根据均值计算绝对离差
        var方差
        std标准差

        df.describe()

        七、Pandas数据重采样

        重采样就是基于时间数据由一个频率转换到另一个频率的方法,分为降采样和升采样。

        降采样:高频率===>低频率,如频率日变为月,需要指定统计函数如sum


        df.resample("M").mean()

        升采样:低频率===>高频率,如频率月变为日,需要进行缺失值填充


        df.resample("D").asfreq().fillna(1)

        来源:https://blog.csdn.net/qq_44285092/article/details/117638171

        标签:pandas,时间,序列
        0
        投稿

        猜你喜欢

      • Python3标准库之dbm UNIX键-值数据库问题

        2024-01-26 15:56:11
      • python中wx模块的具体使用方法

        2023-02-02 05:40:20
      • 在CentOS上MySQL数据库服务器配置方法

        2024-01-19 07:01:21
      • 什么是XML?

        2007-10-29 12:53:00
      • Python列表list的详细用法介绍

        2021-04-17 06:56:15
      • 使用python实现正则匹配检索远端FTP目录下的文件

        2022-03-27 07:29:15
      • 重新编译PLSQL中的无效对象或者指定的对象 的方法

        2009-02-26 10:41:00
      • 详解常用查找数据结构及算法(Python实现)

        2023-02-27 02:03:21
      • 安装MSDE2000提示为了安全起见,要求使用强 SA 密码的解决方法

        2024-01-14 08:49:09
      • z-index在IE中的迷惑

        2007-05-11 16:50:00
      • Python可视化Matplotlib折线图plot用法详解

        2021-01-04 03:06:15
      • Python操作SQLite数据库过程解析

        2024-01-26 08:16:38
      • Python中使用中文的方法

        2021-09-26 05:46:39
      • Python使用面向对象方式创建线程实现12306售票系统

        2021-01-22 09:13:36
      • 删除数据库中重复数据的两个方法

        2008-01-01 19:16:00
      • Python中标准库OS的常用方法总结大全

        2021-04-29 06:43:41
      • 详解python第三方库的安装、PyInstaller库、random库

        2023-03-13 06:57:46
      • Python爬取股票交易数据并可视化展示

        2022-02-06 13:13:22
      • Python 实现日志同时输出到屏幕和文件

        2021-06-25 23:04:29
      • SQL Server忘记sa账号密码重新添加新管理账号

        2024-01-18 09:59:44
      • asp之家 网络编程 m.aspxhome.com