Pandas中時(shí)間序列的處理大全
一、時(shí)間序列數(shù)據(jù)的生成
pd.date_ranges生成時(shí)間序列
- time格式:年月日分隔符號可以是"-","/",空格這三種格式(年月日、日月年、月日年都可以);時(shí)分秒只能用":"分隔,順序只能是時(shí)分秒。
- start:起始時(shí)間(time)
- end:終止時(shí)間(time)
- periods:期數(shù)(int),使用時(shí)只能出現(xiàn)start或者end,兩者不能同時(shí)出現(xiàn)
- freq:頻率(numY,num年;numM,num月;numD,num日),詳細(xì)參數(shù)見下表
頻率別名 | 描述 |
---|---|
B | 工作日頻率 |
C | 自定義工作日頻率 |
D | 日歷日頻率 |
W | 每周頻率 |
M | 每月最后一個(gè)日歷日 |
SM | 每半個(gè)月最后一個(gè)日歷日(15日和月末) |
BM | 每月最后一個(gè)工作日 |
CBM | 自定義每月最后一個(gè)工作日 |
MS | 每月第一個(gè)日歷日 |
SMS | 每半月第一個(gè)日歷日(第1和第15) |
BMS | 每月第一個(gè)工作日 |
CBMS | 自定義每月第一個(gè)工作日 |
Q | 每季度最后一個(gè)月的最后一個(gè)日歷日 |
BQ | 每季度最后一個(gè)月的最后一個(gè)工作日 |
QS | 每季度最后一個(gè)月的第一個(gè)日歷日 |
BQS | 每季度最后一個(gè)月的第一個(gè)工作日 |
A, Y | 每年的最后一個(gè)日歷日 |
BA, BY | 每年的最后一個(gè)工作日 |
AS, YS | 每年的第一個(gè)日歷日 |
BAS, BYS | 每年的第一個(gè)工作日 |
BH | 工作日按“時(shí)”計(jì)算頻率 |
H | 每小時(shí)頻率 |
T, min | 每分鐘頻率 |
S | 每秒頻率 |
L, ms | 毫秒頻率 |
U, us | 微秒頻率 |
N | 納秒頻率 |
import pandas as pd import numpy as np df = pd.DataFrame( data=np.random.randint(1,20,10), index=pd.date_range(start="20/01/2021",periods=10,freq="M"),) print(df)
0
2021-01-31 1
2021-02-28 6
2021-03-31 12
2021-04-30 5
2021-05-31 7
2021-06-30 4
2021-07-31 9
2021-08-31 7
2021-09-30 18
2021-10-31 10
0
count 10.00000
mean 7.90000
std 4.72464
min 1.00000
25% 5.25000
50% 7.00000
75% 9.75000
max 18.00000
二、Pandas設(shè)置索引
創(chuàng)建時(shí)添加索引
pd.DataFrame(...,index=[],...)
df.set_index使用現(xiàn)有列設(shè)置索引
- keys:列名,多個(gè)列用[name1,name2]
- drop:設(shè)置升序(True)、降序(False)
- inplace:替換原變量(True),不替換(False)
df.set_index(["X"],inplace=True) df.set_index(["X","Y"],inplace=True)
df.reset_index可以還原索引
df.reset_index("X")
三、 時(shí)間序列數(shù)據(jù)的截取
df.truncate過濾數(shù)據(jù)
- before:過濾之前的數(shù)據(jù)(time)
- after:過濾之后的數(shù)據(jù)(time)
- axis:列(columns),行(index)
df.truncate(before="2021-5",after="2021-9")
0
2021-05-31 7
2021-06-30 4
2021-07-31 9
2021-08-31 7
df.loc索引過濾
df.loc["2021-5":]
0
2021-05-31 7
2021-06-30 4
2021-07-31 9
2021-08-31 7
2021-09-30 18
2021-10-31 10
四、Pandas重復(fù)值處理
4.1 查詢是否有重復(fù)值
duplicated()方法判斷
# 判斷dataframe數(shù)據(jù)整行是否重復(fù) df.duplicated() # dataframe數(shù)據(jù)某列是否重復(fù) df.columns_name.duplicated() # 判斷dataframe數(shù)據(jù)多列數(shù)據(jù)是否重復(fù)(多列組合查) df.duplicated(subset = ['n1','n2'])
groupby().count()
df.groupby('columns').count()>1
4.2 去除重復(fù)值
drop_duplicats參數(shù)說明:
- 參數(shù)subset:用來指定特定的列,默認(rèn)所有列
- 參數(shù)keep:first和last表示是選擇最前一項(xiàng)還是最后一項(xiàng)保留,默認(rèn)first
- 參數(shù)inplace:是直接在原來數(shù)據(jù)上修改還是保留一個(gè)副本,默認(rèn)為False
df.drop_duplicats(subset=['name1','name2'],keep='last',inplace=True)
按照index索引去重
df.index.duplicated(keep='last')
五、Pandas缺失值處理
5.1 缺失值查詢
df.info查詢各列的信息
df.info() # res <class 'pandas.core.frame.DataFrame'> Int64Index: 10 entries, 19 to 14 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Y 10 non-null int32 1 Z 10 non-null int32 dtypes: int32(2) memory usage: 160.0 bytes
df.isnull判斷是否是空值
df.isnull().any() # 篩選出缺失值的列 df.isna().any() # 篩選出缺失值的列
df.empty判斷是否有空值
df.empty
5.2 缺失值填充
ffill 空值取前面的值
df.ffill()
bfill 空值取后面的值
df.bfill()
fillna 指定值填充
df.fillna(1) df.fillna({'A': 0, 'B': 1, 'C': 2, 'D': 3}) # 指定列填充
interpolate 插值
- df.interpolate(method=‘linear', axis=0, limit=None, inplace=False, limit_direction=‘forward', limit_area=None, downcast=None, **kwargs)
- method參數(shù)解釋
- linear:忽略索引,線性等距插值
- time:在以天或者更高頻率的數(shù)據(jù)上插入給定的時(shí)間間隔長度數(shù)據(jù)
- index, values:使用索引的實(shí)際數(shù)值
- pad:使用現(xiàn)有值填寫NaN
- nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial:傳遞給scipy.interpolate.interp1d。這些方法使用索引的數(shù)值。polynomial和spline都要求您還指定一個(gè)順序(int),例如 ,df.interpolate(method=‘polynomial', order=5)
- krogh,piecewise_polynomial,spline,pchip,akima:包括類似名稱的SciPy插值方法。
- from_derivatives:指 scipy.interpolate.BPoly.from_derivatives,它替換了scipy 0.18中的'piecewise_polynomial'插值方法
- axis : {0或'index',1或'columns',None},默認(rèn)為None;沿軸進(jìn)行interpolate。
- limit: int;要填充的連續(xù)NaN的最大數(shù)量。必須大于0
- inplace : bool,默認(rèn)為False;如果可以,更新現(xiàn)有數(shù)據(jù)
- limit_direction : {‘forward',‘backward',‘both'},默認(rèn)為'forward';如果指定了限制,則將沿該方向填充連續(xù)的NaN
- limit_area : {None, ‘inside', ‘outside'}, 默認(rèn)為None;如果指定了限制,則連續(xù)的NaN將填充此限制。
- None:無填充限制
- inside:僅填充有效值包圍的NaN
- outside: 僅在有效值之外填充NaN
dff.interpolate(method='polynomial',order=2)
刪除缺失值
df.dropna(how='any')
六、pandas統(tǒng)計(jì)計(jì)算方法
方法 | 說明 |
---|---|
count | 非NaN值的數(shù)理 |
describe | 列計(jì)算統(tǒng)計(jì)匯總 |
min、max | 最小值和最大值 |
argmin、argmax | 最小值和最大值索引(int) |
idxmin、idxmax | 最小值和最大值索引 |
quantile | 分位數(shù)([0,1],0.25下四分為) |
sum | 總和 |
mean | 均值 |
median | 0.5分位數(shù),中位數(shù) |
mad | 根據(jù)均值計(jì)算絕對離差 |
var | 方差 |
std | 標(biāo)準(zhǔn)差 |
df.describe()
七、Pandas數(shù)據(jù)重采樣
重采樣就是基于時(shí)間數(shù)據(jù)由一個(gè)頻率轉(zhuǎn)換到另一個(gè)頻率的方法,分為降采樣和升采樣。
降采樣:高頻率===>低頻率,如頻率日變?yōu)樵拢枰付ńy(tǒng)計(jì)函數(shù)如sum
df.resample("M").mean()
升采樣:低頻率===>高頻率,如頻率月變?yōu)槿?,需要進(jìn)行缺失值填充
df.resample("D").asfreq().fillna(1)
總結(jié)
到此這篇關(guān)于Pandas中時(shí)間序列處理的文章就介紹到這了,更多相關(guān)Pandas時(shí)間序列處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python報(bào)錯(cuò)之如何解決matplotlib繪圖中文顯示成框框問題
這篇文章主要介紹了Python報(bào)錯(cuò)之如何解決matplotlib繪圖中文顯示成框框問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python針對mysql數(shù)據(jù)庫的連接、查詢、更新、刪除操作示例
這篇文章主要介紹了python針對mysql數(shù)據(jù)庫的連接、查詢、更新、刪除操作,結(jié)合實(shí)例形式詳細(xì)分析了Python操作mysql數(shù)據(jù)庫的連接與增刪改查相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09Python基于Tkinter的HelloWorld入門實(shí)例
這篇文章主要介紹了Python基于Tkinter的HelloWorld入門實(shí)例,以一個(gè)簡單實(shí)例分析了Python中Tkinter模塊的使用技巧,需要的朋友可以參考下2015-06-06使用python PIL庫實(shí)現(xiàn)簡單驗(yàn)證碼的去噪方法步驟
這篇文章主要介紹了使用python PIL庫實(shí)現(xiàn)簡單驗(yàn)證碼的去噪方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05pycharm 2020.2.4 pip install Flask 報(bào)錯(cuò) Error:Non-zero exit co
這篇文章主要介紹了pycharm 2020.2.4 pip install Flask 報(bào)錯(cuò) Error:Non-zero exit code,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12