时间处理date_range,truncate,Timestamp,Period,Timedelta,resample,rolling

1. date_range

  • 时间戳 ( timestamp )
  • 固定周期 ( period )
  • 时间间隔 ( interval )

可以指定开始时间与周期

  • H:小时
  • D:天
  • M:月
import numpy as np
import pandas as pd

rng = pd.date_range('2018-08-08', periods=10, freq='3D')
rng

在这里插入图片描述

import datetime

time = pd.Series(np.random.randn(20), index=pd.date_range(datetime.datetime(2018,8,8),periods=20))
time

2018-08-08 -0.116898
2018-08-09 0.236001
2018-08-10 0.465807

2018-08-26 1.008301
2018-08-27 0.225361
Freq: D, dtype: float64

2. truncate 过滤

time.truncate(before = '2018-8-15')

time.truncate(after = '2018-8-15')

2018-08-15 -1.244359
2018-08-16 1.043819
2018-08-17 1.870143

2018-08-26 1.008301
2018-08-27 0.225361
Freq: D, dtype: float64
在这里插入图片描述

time['2018-8-10' : '2018-8-14']

2018-08-10 0.465807
2018-08-11 1.365110
2018-08-12 -2.545710
2018-08-13 1.568111
2018-08-15 -1.244359
Freq: D, dtype: float64

data = pd.date_range('2018-1-1', '2019-1-1', freq='M')
data

在这里插入图片描述

3. Timestamp, Period, Timedelta

3.1 Timestamp 时间戳

print(pd.Timestamp('2019-9-9 10'))
pd.Timestamp('2019-9-9 10:15')

2019-09-09 10:00:00
Timestamp(‘2019-09-09 10:15:00’)

3.2 Period 时间区间

pd.Period('2019-1')

Period(‘2019-01’, ‘M’)

pd.Period('2019-1-1')

Period(‘2019-01-01’, ‘D’)

3.3 Timedelta 时间差

pd.Timedelta('1 day')

Timedelta(‘1 day 00:00:00’)

3.4 时间转换

pd.Period('2019-1-1 10:25') + pd.Timedelta('1day')

Period(‘2019-01-02 10:25’, ‘T’)

pd.Timestamp('2019-1-1 10:25') + pd.Timedelta('1day')

Timestamp(‘2019-01-02 10:25:00’)

pd.Timestamp('2019-1-1 10:25') + pd.Timedelta('15 ns')

Timestamp(2019-01-01 10:25:00.000000015’)

4. period_range

p1 = pd.period_range('2019-1-1 10:25', freq='25H', periods=10)
p2 = pd.period_range('2019-1-1 10:25', freq='1D1H', periods=10)
p1
# p2

在这里插入图片描述

5. 时间索引

rng = pd.date_range('2019 Jul 1', periods=10, freq='D`)
pd.Series(range(len(rng)), index = rng)

在这里插入图片描述

periods = [pd.Period('2019-05'), pd.Period('2019-06'), pd.Period('2019-07')]
ts = pd.Series(np.random.randn(len(periods)), index = periods)
print(ts.index)
ts

pandas.core.indexes.period.PeriodIndex
2019-05 0.295038
2019-06 2.265023
2019-07 -0.108697
Freq: M, dtype: float64

6. 时间戳Timestamp 和时间周期period 转换

ts = pd.Series(range(10), pd.date_range('11-11-19 12:20', periods=10, freq='H'))
ts

在这里插入图片描述

ts_period = ts.to_period()
ts_period

在这里插入图片描述

ts_period['2019-11-11 14:30' : '2019-11-11 16:30']

在这里插入图片描述

ts['2019-11-11 14:30' : '2019-11-11 16:30']

在这里插入图片描述

7. 重采样 resample

  • 时间数据由一个频率转换到另一个频率
  • 降采样
  • 升采样
import numpy as np
import pandas as pd

rng = pd.date_range('1/1/2019', periods=90, freq='D')
ts = pd.Series(np.random.randn(len(rng)), index=rng)
ts.head(6)

在这里插入图片描述

ts.resample('M').sum()

在这里插入图片描述

day10Ts = ts.resample('10D').mean()
day10Ts

在这里插入图片描述

day10Ts.resample('D').asfreq()

2019-01-01 0.354829
2019-01-02 NaN
2019-01-03 NaN
2019-01-04 NaN
2019-01-05 NaN
2019-01-06 NaN
2019-01-07 NaN
2019-01-08 NaN
2019-01-09 NaN
2019-01-10 NaN
2019-01-11 -0.635114
2019-01-12 NaN

2019-03-21 NaN
2019-03-22 -0.242809
Freq: D, Length: 81, dtype: float64

8. 插值方法 fill

  • ffill 空值取前面的值
  • bfill 空值取后面的值
  • interpolate 线性取值
day10Ts.resample('D`).ffill(1)

在这里插入图片描述

day10Ts.resample('D').bfill(1)

在这里插入图片描述

day10Ts.resample('D').interpolate('linear')

在这里插入图片描述

9. Moving Window Functions 滑动窗口 rolling

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.Series(np.random.randn(600), index=pd.date_range('1/15/2020', freq='D', periods=600))
df.head()

在这里插入图片描述

r = df.rolling(window = 10)
r

Rolling [window=10,center=False,axis=0]

# r.max(), r.mediam(), r.std(), r.sum(), r.var()
# r.skew() 数据的偏度(Skewness)
r.mean()

在这里插入图片描述
Freq: D, Length: 600, dtype: float64

plt.figure(figsize = (18, 6))
df.plot(style = 'r--')
df.rolling(window = 10).mean().plot(style = 'b')

在这里插入图片描述

plt.figure(figsize = (18, 6))
df.plot(style = 'r--')
df.rolling(window = 10).skew().plot(style = 'b')

在这里插入图片描述
[ 时间更多相关操作见https://blog.csdn.net/sanjianjixiang/article/details/102892864 ]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章