Pandas中時間序列的處理大全
pd.date_ranges生成時間序列
time格式:年月日分隔符號可以是'-','/',空格這三種格式(年月日、日月年、月日年都可以);時分秒只能用':'分隔,順序只能是時分秒。 start:起始時間(time) end:終止時間(time) periods:期數(int),使用時只能出現start或者end,兩者不能同時出現 freq:頻率(numY,num年;numM,num月;numD,num日),詳細參數見下表 頻率別名 描述 B 工作日頻率 C 自定義工作日頻率 D 日歷日頻率 W 每周頻率 M 每月最后一個日歷日 SM 每半個月最后一個日歷日(15日和月末) BM 每月最后一個工作日 CBM 自定義每月最后一個工作日 MS 每月第一個日歷日 SMS 每半月第一個日歷日(第1和第15) BMS 每月第一個工作日 CBMS 自定義每月第一個工作日 Q 每季度最后一個月的最后一個日歷日 BQ 每季度最后一個月的最后一個工作日 QS 每季度最后一個月的第一個日歷日 BQS 每季度最后一個月的第一個工作日 A, Y 每年的最后一個日歷日 BA, BY 每年的最后一個工作日 AS, YS 每年的第一個日歷日 BAS, BYS 每年的第一個工作日 BH 工作日按“時”計算頻率 H 每小時頻率 T, min 每分鐘頻率 S 每秒頻率 L, ms 毫秒頻率 U, us 微秒頻率 N 納秒頻率import pandas as pdimport numpy as npdf = pd.DataFrame( data=np.random.randint(1,20,10), index=pd.date_range(start='20/01/2021',periods=10,freq='M'),) print(df)
02021-01-31 12021-02-28 62021-03-31 122021-04-30 52021-05-31 72021-06-30 42021-07-31 92021-08-31 72021-09-30 182021-10-31 10
0count 10.00000mean 7.90000std 4.72464min 1.0000025% 5.2500050% 7.0000075% 9.75000max 18.00000
二、Pandas設置索引創建時添加索引
pd.DataFrame(...,index=[],...)
df.set_index使用現有列設置索引
keys:列名,多個列用[name1,name2] drop:設置升序(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')三、 時間序列數據的截取
df.truncate過濾數據
before:過濾之前的數據(time) after:過濾之后的數據(time) axis:列(columns),行(index)df.truncate(before='2021-5',after='2021-9')
02021-05-31 72021-06-30 42021-07-31 92021-08-31 7
df.loc索引過濾
df.loc['2021-5':]
02021-05-31 72021-06-30 42021-07-31 92021-08-31 72021-09-30 182021-10-31 10
四、Pandas重復值處理4.1 查詢是否有重復值duplicated()方法判斷
# 判斷dataframe數據整行是否重復df.duplicated()# dataframe數據某列是否重復df.columns_name.duplicated()# 判斷dataframe數據多列數據是否重復(多列組合查)df.duplicated(subset = [’n1’,’n2’])
groupby().count()
df.groupby(’columns’).count()>14.2 去除重復值
drop_duplicats參數說明:
參數subset:用來指定特定的列,默認所有列 參數keep:first和last表示是選擇最前一項還是最后一項保留,默認first 參數inplace:是直接在原來數據上修改還是保留一個副本,默認為Falsedf.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 14Data columns (total 2 columns): # Column Non-Null Count Dtype--- ------ -------------- ----- 0 Y 10 non-null int32 1 Z 10 non-null int32dtypes: 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參數解釋 linear:忽略索引,線性等距插值time:在以天或者更高頻率的數據上插入給定的時間間隔長度數據index, values:使用索引的實際數值pad:使用現有值填寫NaNnearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial:傳遞給scipy.interpolate.interp1d。這些方法使用索引的數值。polynomial和spline都要求您還指定一個順序(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},默認為None;沿軸進行interpolate。 limit: int;要填充的連續NaN的最大數量。必須大于0 inplace : bool,默認為False;如果可以,更新現有數據 limit_direction : {‘forward’,‘backward’,‘both’},默認為’forward’;如果指定了限制,則將沿該方向填充連續的NaN limit_area : {None, ‘inside’, ‘outside’}, 默認為None;如果指定了限制,則連續的NaN將填充此限制。 None:無填充限制 inside:僅填充有效值包圍的NaN outside: 僅在有效值之外填充NaNdff.interpolate(method=’polynomial’,order=2)
刪除缺失值
df.dropna(how=’any’)六、pandas統計計算方法方法 說明 count 非NaN值的數理 describe 列計算統計匯總 min、max 最小值和最大值 argmin、argmax 最小值和最大值索引(int) idxmin、idxmax 最小值和最大值索引 quantile 分位數([0,1],0.25下四分為) sum 總和 mean 均值 median 0.5分位數,中位數 mad 根據均值計算絕對離差 var 方差 std 標準差
df.describe()七、Pandas數據重采樣
重采樣就是基于時間數據由一個頻率轉換到另一個頻率的方法,分為降采樣和升采樣。
降采樣:高頻率===>低頻率,如頻率日變為月,需要指定統計函數如sum
df.resample('M').mean()
升采樣:低頻率===>高頻率,如頻率月變為日,需要進行缺失值填充
df.resample('D').asfreq().fillna(1)總結
到此這篇關于Pandas中時間序列處理的文章就介紹到這了,更多相關Pandas時間序列處理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: