怎么传日期参数_时间序列amp;日期学习笔记大全(下)
作者:湛林
來源:凹凸數(shù)據(jù)
時間序列&日期學習筆記大全(上)
建議收藏
9. 日期 時間的組成
dt.方法,具體參數(shù)及含義詳見附件
#?可以通過s.dt.time?獲得各種信息s.dt.year
s.dt.date
#?可以用于篩選日期數(shù)據(jù)
s[s.dt.day?==?2]
#?將日期數(shù)據(jù)轉(zhuǎn)化為字符串數(shù)據(jù),并設置格式
s.dt.strftime('%Y/%m/%d')
10. 日期偏移量
Dateoffset參數(shù)可以用于freq參數(shù),詳見附件
friday?=?pd.Timestamp('2018-01-05')two_business_days?=?2?*?pd.offsets.BDay()
friday?+?two_business_days
two_business_days.apply(friday)
d?=?datetime.datetime(2008,?8,?18,?9,?0)
#?pd.offsets.Week()?加一周的時間
d?+?pd.offsets.Week()
#?默認一周7天,可以穿參數(shù)?一周設置為4天
d?+?pd.offsets.Week(weekday=4)
#?加減天數(shù)后,把時間重置為午夜時分?normalize=True
d?+?pd.offsets.Week(normalize=True)
#?直接到年底的函數(shù),默認是12月是最后一個月,可以傳參數(shù)設置年底月份(用于財務年度)
?d?+?pd.offsets.YearEnd(month=6)
11. 對Series和數(shù)據(jù)框使用日期偏移
可以將偏移量應用到每個元素
rng?=?pd.date_range('2012-01-01',?'2012-01-03')s?=?pd.Series(rng)
#?對s?序列所有日期進行偏移,偏移2個月
s?+?pd.DateOffset(months=2)
#?偏移的是日,時分秒的時候,可以直接類似timedelta使用
s?-?pd.offsets.Day(2)
s?-?pd.Series(pd.date_range('2011-12-29',?'2011-12-31'))
s?+?pd.offsets.Minute(15)
定制工作日方法詳見 Custom business days
定制工作時間的方法 詳見 Business hour和 Custom business hour、
對于一些固定的偏移量,可以參考Anchored offsets
12. 錨定點偏移
當給定的時間是錨定點(月底,月初等),那就往后或往前走n-1步。
給定的時間是錨定點(月初,月末),往后/前走n步
In?[236]:?pd.Timestamp('2014-01-02')?+?pd.offsets.MonthBegin(n=1)Out[236]:?Timestamp('2014-02-01?00:00:00')
In?[237]:?pd.Timestamp('2014-01-02')?+?pd.offsets.MonthEnd(n=1)
Out[237]:?Timestamp('2014-01-31?00:00:00')
In?[238]:?pd.Timestamp('2014-01-02')?-?pd.offsets.MonthBegin(n=1)
Out[238]:?Timestamp('2014-01-01?00:00:00')
In?[239]:?pd.Timestamp('2014-01-02')?-?pd.offsets.MonthEnd(n=1)
Out[239]:?Timestamp('2013-12-31?00:00:00')
In?[240]:?pd.Timestamp('2014-01-02')?+?pd.offsets.MonthBegin(n=4)
Out[240]:?Timestamp('2014-05-01?00:00:00')
In?[241]:?pd.Timestamp('2014-01-02')?-?pd.offsets.MonthBegin(n=4)
Out[241]:?Timestamp('2013-10-01?00:00:00')
13. 時間序列相關方法
13.1 轉(zhuǎn)換時間頻率
dr?=?pd.date_range('1/1/2010',?periods=3,?freq=3?*?pd.offsets.BDay())ts?=?pd.Series(np.random.randn(3),?index=dr)
ts.asfreq(pd.offsets.BDay())
#?改變頻率后,補充空值的方法
ts.asfreq(pd.offsets.BDay(),?method='ffill')
14. 重新采樣 resample
resample是一個基于時間的groupby方法,可以方便的用于頻率轉(zhuǎn)換,重采樣功能非常靈活,允許指定許多不同的參數(shù)來控制頻率轉(zhuǎn)換和重采樣操作。通過調(diào)度可用的任何函數(shù)都可以作為返回對象的方法使用,包括sum, mean, std, sem, max, min,median,first, last, ohlc
#?原數(shù)據(jù)是按?秒?來設置的rng?=?pd.date_range('1/1/2012',?periods=100,?freq='S')
ts?=?pd.Series(np.random.randint(0,?500,?len(rng)),?index=rng)
#?按照1分鐘重新采樣數(shù)據(jù),并求和
ts.resample('1Min').sum()
#?按照1分鐘重新采樣數(shù)據(jù),并求?高開低收
ts.resample('1Min').ohlc()
#?源數(shù)據(jù)是按秒來設置的,要重新以250毫秒進行采樣
ts[:2].resample('250L').asfreq()
ts[:2].resample('250L').ffill(limit=2)
15. 重新采樣resample的參數(shù) agg
df?=?pd.DataFrame(np.random.randn(1000,?3),?index=pd.date_range('1/1/2012',freq='S',?periods=1000),columns=['A',?'B',?'C'])
#?和groupby函數(shù)使用方法類似
r?=?df.resample('3T')
#?group內(nèi)求平均值
r.mean()
#?對指定列的group求平均值
r['A'].mean()
#?對特定的幾列的group求平均值
r[['A',?'B']].mean()
#?對特定列的group求和,求平均值,求標準差
r['A'].agg([np.sum,?np.mean,?np.std])
#?對整個數(shù)據(jù)框按group求和,求均值
r.agg([np.sum,?np.mean])
#?對不同列求不同的統(tǒng)計數(shù)據(jù)
r.agg({'A':?'sum',?'B':?'std'})
#?對不同列求不同的多個統(tǒng)計數(shù)據(jù)
r.agg({'A':?['sum',?'std'],?'B':?['mean',?'std']})
- 如果索引不方便設置為DatetimeIndex,可以用on將日期列傳入
df.resample('M',?on='date').sum()
#?MultiIndex里有日期,那就用level來傳入日期
df.resample('M',?level='d').sum()
16. resample的遍歷
#?name是分組依據(jù),group是分數(shù)后的數(shù)據(jù)for?name,?group?in?resampled:
????print("Group:?",?name)
????print("-"?*?27)
????print(group,?end="\n\n")
17. Period 周期 時期
#?可以用period_range?直接生成#?用freq參數(shù)傳入時期的頻率
pd.Period('2012-1-1',?freq='D')
#?周期時間可以相加減
p?=?pd.Period('2012-01',?freq='2M')
p?+?2
#?也可以加一個timedelta或offset,但是時間單位必須一樣
p?=?pd.Period('2014-07-01?09:00',?freq='H')
p?+?pd.offsets.Hour(2)??????????????????#?加兩小時
p?+?datetime.timedelta(minutes=120)?????#?120分鐘,倆小時
p?+?pd.offsets.Minute(5)????????????????#?時間跨度單位不一致,報錯
#?周期之間相減,返回之間的差值
pd.Period('2012',?freq='A-DEC')?-?pd.Period('2002',?freq='A-DEC')
18. 周期序列 PeriodIndex
#?可以用pd.period_range創(chuàng)建,也可以直接創(chuàng)建prng?=?pd.period_range('1/1/2011',?'1/1/2012',?freq='M')
pd.PeriodIndex(['2011-1',?'2011-2',?'2011-3'],?freq='M')
pd.period_range(start='2014-01',?freq='3M',?periods=4)??????
#?周期序列也可以支持加減操作
idx?=?pd.period_range('2014-07-01?09:00',?periods=5,?freq='H')
idx?+?pd.offsets.Hour(2)
18.1 周期類型數(shù)據(jù)的轉(zhuǎn)換
pi?=?pd.period_range('2016-01-01',?periods=3,?freq='M')#?轉(zhuǎn)換為天?為單位的周期
pi.astype('period[D]')
#?轉(zhuǎn)換為時間序列
pi.astype('datetime64[ns]')
#?轉(zhuǎn)換成周期序列
dti?=?pd.date_range('2011-01-01',?freq='M',?periods=3)
dti.astype('period[M]')
18.2 索引 切片,部分字符串索引
dfp?=?pd.DataFrame(np.random.randn(600,?1),columns=['A'],index=pd.period_range('2013-01-01?9:00',periods=600,freq='T'))#?切片篩選2013-01-01?十點的全部數(shù)據(jù)
dfp['2013-01-01?10H']
18.3 改變周期的頻率
和時間不同的是,周期頻率從年變?yōu)樵?#xff0c;也是一個數(shù)據(jù)。一年周期==>一個月周期,因此要設置改了之后是取開頭還是取結(jié)尾
p?=?pd.Period('2011',?freq='A-DEC')p.asfreq('M',?how='start')
自定義設置時間年度,會計年度詳見Frequency conversion and resampling with PeriodIndex
18.4 周期和時間戳的轉(zhuǎn)換
rng?=?pd.date_range('1/1/2012',?periods=5,?freq='M')ts?=?pd.Series(np.random.randn(len(rng)),?index=rng)
ps?=?ts.to_period()
ps.to_timestamp()
#?轉(zhuǎn)換為時間戳時候,可以添加參數(shù)選擇周期開頭還是結(jié)尾
ps.to_timestamp('D',?how='s')
#?將時間轉(zhuǎn)為季度末下一天的早上九點
prng?=?pd.period_range('1990Q1',?'2000Q4',?freq='Q-NOV')
ts?=?pd.Series(np.random.randn(len(prng)),?prng)
ts.index?=?(prng.asfreq('M',?'e')?+?1).asfreq('H',?'s')?+?9
19. 與時區(qū)相關的知識
詳見Time zone handling
總結(jié)
以上是生活随笔為你收集整理的怎么传日期参数_时间序列amp;日期学习笔记大全(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: npm安装不上nodemon_node.
- 下一篇: oracle 增加ora容量_oracl