【Python數據分析】pandas日期范圍date_range


1.date_range

1.1 按頻率生成時間段

import pandas as pd
print(pd.date_range('2017/1/1','2017/1/4'))  # 默認freq = 'D':每日歷日
print(pd.date_range('2017/1/1','2017/1/4', freq = 'B'))  # B:每工作日
print(pd.date_range('2017/1/1','2017/1/2', freq = 'H'))  # H:每小時
print(pd.date_range('2017/1/1 12:00','2017/1/1 12:10', freq = 'T'))  # T/MIN:每分
print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'S'))  # S:每秒
print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'L'))  # L:每毫秒(千分之一秒)
print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'U'))  # U:每微秒(百萬分之一秒)

print(pd.date_range('2017/1/1','2017/2/1', freq = 'W-MON'))
# W-MON:從指定星期幾開始算起,每周
# 星期幾縮寫:MON/TUE/WED/THU/FRI/SAT/SUN

print(pd.date_range('2017/1/1','2017/5/1', freq = 'WOM-2MON'))
# WOM-2MON:每月的第幾個星期幾開始算,這里是每月第二個星期一

print(pd.date_range('2017','2018', freq = 'M'))
print(pd.date_range('2017','2020', freq = 'Q-DEC'))
print(pd.date_range('2017','2020', freq = 'A-DEC'))
print('-' * 50)
# M:每月最后一個日歷日
# Q-月:指定月為季度末,每個季度末最后一月的最后一個日歷日
# A-月:每年指定月份的最后一個日歷日
# 月縮寫:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC
# 所以Q-月只有三種情況:1-4-7-10,2-5-8-11,3-6-9-12

print(pd.date_range('2017','2018', freq = 'BM'))
print(pd.date_range('2017','2020', freq = 'BQ-DEC'))
print(pd.date_range('2017','2020', freq = 'BA-DEC'))
print('*' * 50)
# BM:每月最后一個工作日
# BQ-月:指定月為季度末,每個季度末最后一月的最后一個工作日
# BA-月:每年指定月份的最后一個工作日

print(pd.date_range('2017','2018', freq = 'MS'))
print(pd.date_range('2017','2020', freq = 'QS-DEC'))
print(pd.date_range('2017','2020', freq = 'AS-DEC'))
print('-' * 50)
# M:每月第一個日歷日
# Q-月:指定月為季度末,每個季度末最后一月的第一個日歷日
# A-月:每年指定月份的第一個日歷日

print(pd.date_range('2017','2018', freq = 'BMS'))
print(pd.date_range('2017','2020', freq = 'BQS-DEC'))
print(pd.date_range('2017','2020', freq = 'BAS-DEC'))
# BM:每月第一個工作日
# BQ-月:指定月為季度末,每個季度末最后一月的第一個工作日
# BA-月:每年指定月份的第一個工作日

1.2 按復合頻率生成時間段

import pandas as pd
print(pd.date_range('2017/1/1','2017/2/1', freq = '7D'))  # 7天
print(pd.date_range('2017/1/1','2017/1/2', freq = '2h30min'))  # 2小時30分鍾
print(pd.date_range('2017','2018', freq = '2M'))  # 2月,每月最后一個日歷日

1.3 asfreq頻率轉換

import numpy as np
import pandas as pd
ts = pd.Series(np.random.rand(4), index = pd.date_range('20170101','20170104'))
print(ts)
print(ts.asfreq('4H',method = 'ffill'))
# 改變頻率,這里是D改為4H
# method:插值模式,None不插值,ffill用之前值填充,bfill用之后值填充

1.4 生成超前-滯后的數據范圍

import numpy as np
import pandas as pd
# pd.date_range()-日期范圍:超前/滯后數據

ts = pd.Series(np.random.rand(4),
              index = pd.date_range('20170101','20170104'))
print(ts)

print(ts.shift(2))
print(ts.shift(-2))
print('*' * 50)
# 正數:數值后移(滯后);負數:數值前移(超前)

per = ts/ts.shift(1) - 1
print(per)
print('-' * 50)
# 計算變化百分比,這里計算:該時間戳與上一個時間戳相比,變化百分比

print(ts.shift(2, freq = 'D'))
print(ts.shift(2, freq = 'T'))
# 加上freq參數:對時間戳進行位移,而不是對數值進行位移

2.時間戳索引DatetimeIndex

以下是一個生成時間戳索引的案例

import pandas as pd
import numpy as np
# 直接生成時間戳索引,支持str、datetime.datetime
# 單個時間戳為Timestamp,多個時間戳為DatetimeIndex
dix = pd.DatetimeIndex(['2020-01-01','2020-01-02','2020-01-03','2020-01-04'])
print(dix)
print(dix[0],type(dix[0]))

print('-' * 50)

# 以DatetimeIndex為index的Series,為TimeSries,時間序列
st = pd.Series(np.random.rand(len(dix)), index = dix)
print(st,type(st))
print(st.index)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM