当前位置 博文首页 > Pandas中时间序列的处理大全

    Pandas中时间序列的处理大全

    作者:FOR.GET 时间:2021-08-10 17:48

    目录
    • 一、时间序列数据的生成
    • 二、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 均值
          median 0.5分位数,中位数
          mad 根据均值计算绝对离差
          var 方差
          std 标准差
          df.describe()
          

          七、Pandas数据重采样

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

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

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

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

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

          总结

          jsjbwy
          下一篇:没有了