Python 数据降级(重采样)

在数据处理中,经常有高频数据转成低频,秒级数据转成分钟、小时数据等。我们将讨论以下方法:

  1. 使用 Pandas 的 resample 方法:

    • 示例:将天数据转化成月数据。

    • 代码示例:

      import pandas as pd
      import numpy as np
      
      # 创建随机成绩score数据
      df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', end='2023-12-31', freq='D'),
         				'value': range(365)})
      
      
      print(df)
      ##########
         	   date  value
      0   2023-01-01      0
      1   2023-01-02      1
      2   2023-01-03      2
      3   2023-01-04      3
      4   2023-01-05      4
      ..         ...    ...
      360 2023-12-27    360
      361 2023-12-28    361
      362 2023-12-29    362
      363 2023-12-30    363
      364 2023-12-31    364
      [365 rows x 2 columns]
      ##########
      
      
      # 设置索引
      df.set_index('date', inplace=True)
      
      # 使用resample()方法进行重新采样
      # 将每日数据转换为每月数据并计算每月的总和
      monthly_data = df['value'].resample('ME').sum()
      
      print(monthly_data)
      ##########
      date
      2023-01-31      465
      2023-02-28     1246
      2023-03-31     2294
      2023-04-30     3135
      2023-05-31     4185
      2023-06-30     4965
      2023-07-31     6076
      2023-08-31     7037
      2023-09-30     7725
      2023-10-31     8928
      2023-11-30     9555
      2023-12-31    10819
      Freq: ME, Name: value, dtype: int64
      ##########
      
      
      # 将每日转成每两个月采一次样
      monthly_data2 = df['value'].resample('2ME').sum()
      
      print(monthly_data2)
      ##########
      date
      2023-01-31      465
      2023-03-31     3540
      2023-05-31     7320
      2023-07-31    11041
      2023-09-30    14762
      2023-11-30    18483
      2024-01-31    10819
      Freq: 2ME, Name: value, dtype: int64
      ##########
      
      
      # 将每月数据转换为每季度数据并计算每季度的平均值
      quarterly_data = monthly_data.resample('QE').mean()
      
      print(quarterly_data)
      ##########
      date
      2023-03-31    1335.000000
      2023-06-30    4095.000000
      2023-09-30    6946.000000
      2023-12-31    9767.333333
      Freq: QE-DEC, Name: value, dtype: float64
      ##########
      
      
      # 将每季度数据转换为每年数据并计算每年的最大值
      annual_data = quarterly_data.resample('YE').max()
      
      print(annual_data)
      ##########
      date
      2023-12-31    9767.333333
      Freq: YE-DEC, Name: value, dtype: float64
      ##########
      
    • 查看每月数据的平均值:df['value'].resample('ME').mean()

      print(df['value'].resample('ME').mean())
      ##########
      date
      2023-01-31     15.0
      2023-02-28     44.5
      2023-03-31     74.0
      2023-04-30    104.5
      2023-05-31    135.0
      2023-06-30    165.5
      2023-07-31    196.0
      2023-08-31    227.0
      2023-09-30    257.5
      2023-10-31    288.0
      2023-11-30    318.5
      2023-12-31    349.0
      Freq: ME, Name: value, dtype: float64
      ##########
      
posted @ 2024-05-19 13:20  TY520  阅读(20)  评论(0编辑  收藏  举报