前幾天學(xué)了時(shí)間序列構(gòu)造與索引轉(zhuǎn)換的相關(guān)操作,詳情如下:
類別 | 函數(shù) | 作用或參數(shù)說(shuō)明 |
構(gòu)造或生成時(shí)間序列 | Datetime(2001,1,1) | 將字符串轉(zhuǎn)成時(shí)點(diǎn)類型數(shù)值 |
Pd.to_datetime(‘2000-02-02’) | ||
Datetime.strptime(’03-01-2014年’,’%m-%d-%Y年’) | 將不規(guī)則字符串轉(zhuǎn)成時(shí)點(diǎn)類型數(shù)值 | |
Datetime.strftime(datetime.now(),’today is : %Y-%m-%d’) | 將時(shí)點(diǎn)類型數(shù)值轉(zhuǎn)成字符串 | |
DataFrame[‘birthday’].apply(str) | ||
Pd.date_range(‘20200101’,period=6,freq=’M’) | 按要求生成一個(gè)指定間隔的時(shí)點(diǎn)類型數(shù)值 Freq=’M/MS/2M/1h30min/90T’ | |
peariodIndex(values,freq=’M’) | 按要求生成一個(gè)指定序列(不一定間隔相同)的時(shí)點(diǎn)類型數(shù)值 | |
時(shí)間索引轉(zhuǎn)換 | Student.to_peariod(‘A-Aug’) | 將一個(gè)時(shí)點(diǎn)索引按指定格式分成多個(gè)時(shí)期索引數(shù)值 |
Student.to_timestamp() | 將時(shí)期索引數(shù)值轉(zhuǎn)換為時(shí)點(diǎn)索引數(shù)值 | |
Student.asfreq(freq=’D’,how=end) | 時(shí)點(diǎn)索引與時(shí)期索引相互轉(zhuǎn)換 |
1、以月為單位統(tǒng)計(jì)學(xué)生的個(gè)數(shù)
相當(dāng)于按某格式轉(zhuǎn)換時(shí)間索引,但轉(zhuǎn)換時(shí)間格式后一般需要另存一張dataframe,而resample()卻不需要,能直接使用。
【腳本】:
print(students['ID'].resample('M', kind='period').count())
【結(jié)果】
2000-09 1
..
2007-07 0
2007-08 1
【說(shuō)明】
1、 這個(gè)采樣相當(dāng)于分組,但也不完全相同于分組,這里會(huì)多出很多你數(shù)據(jù)中原本不存在的組,比如2007-07這個(gè)月份在原數(shù)據(jù)中其實(shí)是不存在的,但按月采樣后,卻是從最小月到最大月的全時(shí)段分組。
2、 既然分組會(huì)產(chǎn)生空值組,那么怎樣處理呢?
填充:以最近一個(gè)值向下填充
如:print(students['height'].resample('M').ffill())注意這里不再加kind=’period’;也可以增加limit=2,即
print(students['height'].resample('M').ffill(limit=2))
【腳本】
print(students['height'].resample('H').ffill(limit=1))【結(jié)果】相當(dāng)于[01:00:00,02:00:00)
當(dāng)然標(biāo)簽一樣可以選擇左、右區(qū)間的邊界,這里既然是右閉,那就以右邊界為標(biāo)簽吧,腳本可以寫(xiě)為:
print(students['height'].resample('H', label='right', closed='right').mean())3、以季度為單位采樣并填充
【腳本】
print(students['height'].resample('Q-DEC', label='right', closed='right').ffill())【結(jié)果】
也可以使用參數(shù)為A的操作
4、類似股票市場(chǎng)的采樣,采集該時(shí)段內(nèi)開(kāi)盤(pán)值、最大值、最小值、收盤(pán)值
【腳本】
print(students['height'].resample('A').ohlc())【結(jié)果】
【說(shuō)明】
O: open
H: high
L: low
C: close