asfreq的API(地址:https://pandas.pydata.org/pandasdocs/stable/reference/api/pandas.DataFrame.asfreq.html)
第四课 Pandas时序型数据分析
第四节 时序数据的位移与频率调整
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#parse_dates=True将时间序列解析为datetime类型
data_df = pd.read_csv('./datasets/day_stats.csv', index_col='date', parse_dates=True, dayfirst=True)
data_df.head()
city PM_China PM_US Post Polluted State CH Polluted State US
date
2013-10-01 beijing 67.416667 71.458333 light light
2013-10-10 beijing 74.041667 81.583333 light medium
2013-10-11 beijing 59.694444 59.291667 light light
2013-10-12 beijing 69.236111 70.458333 light light
2013-10-13 beijing 54.513889 57.333333 light light
beijing_data = data_df[data_df['city'] == 'beijing'].copy()
beijing_data['PM_China'].plot(figsize=(10, 5))
<matplotlib.axes._subplots.AxesSubplot at 0x1de1cc83ba8>
位移 shift
beijing_data['+1'] = beijing_data['PM_China'].shift(1)
beijing_data['-1'] = beijing_data['PM_China'].shift(-1)
beijing_data.head()
city PM_China PM_US Post Polluted State CH Polluted State US +1 -1
date
2013-10-01 beijing 67.416667 71.458333 light light NaN 74.041667
2013-10-10 beijing 74.041667 81.583333 light medium 67.416667 59.694444
2013-10-11 beijing 59.694444 59.291667 light light 74.041667 69.236111
2013-10-12 beijing 69.236111 70.458333 light light 59.694444 54.513889
2013-10-13 beijing 54.513889 57.333333 light light 69.236111 37.739130
beijing_data.loc['2015-01'][['PM_China', '+1', '-1']].plot(figsize=(10, 5))
<matplotlib.axes._subplots.AxesSubplot at 0x1de1cdab8d0>
频率调整 asfreq
# 高频转低频
beijing_data.asfreq(freq='M').head()
city PM_China PM_US Post Polluted State CH Polluted State US +1 -1
date
2013-10-31 beijing 142.666667 170.750000 medium heavy 92.583333 160.055556
2013-11-30 beijing 34.166667 34.708333 good good 41.763889 44.565217
2013-12-31 beijing 49.722222 49.333333 light light 44.571429 107.402778
2014-01-31 beijing 142.680556 166.208333 medium heavy 65.930556 140.222222
2014-02-28 beijing 84.194444 102.666667 medium medium 16.651515 6.304348
beijing_data['2013-12-31']
city PM_China PM_US Post Polluted State CH Polluted State US +1 -1
date
2013-12-31 beijing 49.722222 49.333333 light light 44.571429 107.402778
# 低频转高频
beijing_data.asfreq(freq='12H').head(20)
city PM_China PM_US Post Polluted State CH Polluted State US +1 -1
date
2013-10-01 00:00:00 beijing 67.416667 71.458333 light light NaN 74.041667
2013-10-01 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-02 00:00:00 beijing 16.680556 19.541667 good good 60.944444 24.971014
2013-10-02 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-03 00:00:00 beijing 62.041667 61.041667 light light 31.500000 92.583333
2013-10-03 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-04 00:00:00 beijing 160.055556 168.166667 heavy heavy 142.666667 286.782609
2013-10-04 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-05 00:00:00 beijing 286.782609 305.913044 heavy heavy 160.055556 219.152778
2013-10-05 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-06 00:00:00 beijing 219.152778 213.416667 heavy heavy 286.782609 105.472222
2013-10-06 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-07 00:00:00 beijing 105.472222 91.291667 medium medium 219.152778 78.129630
2013-10-07 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-08 00:00:00 beijing 78.129630 63.611111 medium light 105.472222 145.541667
2013-10-08 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-09 00:00:00 beijing 145.541667 146.500000 medium medium 78.129630 204.305556
2013-10-09 12:00:00 NaN NaN NaN NaN NaN NaN NaN
2013-10-10 00:00:00 beijing 74.041667 81.583333 light medium 67.416667 59.694444
2013-10-10 12:00:00 NaN NaN NaN NaN NaN NaN NaN
# 低频转高频,使用fill_value填充空值
beijing_data.asfreq(freq='12H', fill_value=0).head(20)
city PM_China PM_US Post Polluted State CH Polluted State US +1 -1
date
2013-10-01 00:00:00 beijing 67.416667 71.458333 light light NaN 74.041667
2013-10-01 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-02 00:00:00 beijing 16.680556 19.541667 good good 60.944444 24.971014
2013-10-02 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-03 00:00:00 beijing 62.041667 61.041667 light light 31.500000 92.583333
2013-10-03 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-04 00:00:00 beijing 160.055556 168.166667 heavy heavy 142.666667 286.782609
2013-10-04 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-05 00:00:00 beijing 286.782609 305.913044 heavy heavy 160.055556 219.152778
2013-10-05 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-06 00:00:00 beijing 219.152778 213.416667 heavy heavy 286.782609 105.472222
2013-10-06 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-07 00:00:00 beijing 105.472222 91.291667 medium medium 219.152778 78.129630
2013-10-07 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-08 00:00:00 beijing 78.129630 63.611111 medium light 105.472222 145.541667
2013-10-08 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-09 00:00:00 beijing 145.541667 146.500000 medium medium 78.129630 204.305556
2013-10-09 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000
2013-10-10 00:00:00 beijing 74.041667 81.583333 light medium 67.416667 59.694444
2013-10-10 12:00:00 0 0.000000 0.000000 0 0 0.000000 0.000000