1. 程式人生 > >#python#DataFrame 時間序列資料處理常用操作

#python#DataFrame 時間序列資料處理常用操作

有X個機組以15分鐘為步長的長系列(年月日時分)出力的資料,想處理成每個機組的,以“年月日”為索引值,每行顯示1天96個點出力的形式。

先利用df.head()把dataframe按96切割成Y份,然後將Y份的第x列(x號機組的出力)提取出來,放到list裡,再利用concat將list合併為新的dataframe,將該dataframe的列名更改為長系列(年月日),再轉置,就可以得到想要的格式。

1. 已知某元素索引位置,選取該元素

dataframe 如下,記為df


輸入 df.loc['索引名稱‘’,‘列名稱’] 即可,例如


若沒有index或列名稱,則使用df.iloc[]在對應位置輸入索引位置即可。

2. 刪除多行/多列

使用的前提是,dataframe的index和columns用的是數字,利用了drop()和range()函式。

DataFrame.drop(labels=Noneaxis=0index=Nonecolumns=Nonelevel=Noneinplace=Falseerrors='raise')

axis = 0,表示刪除行; axis = 1 表示刪除列。

想刪除多行/列,用range即可,比如要刪除前3行,drop(range(0,3),axis = 0(預設為零,可不寫))即可。


用dataframe.drop()可以刪除,預設inplace = false, 即預設只是刪除檢視,如果要真的刪除數,輸入inplace=True.

【注意】inplace=True 刪除後index也變了。

這個是cookbook對drop的解釋:

3. 多個dataframe中選取列,合併為1個新的dataframe


用到了

1)刪除dataframe索引,重新賦予從0開始的索引;

    df.reset_index(drop=True,inplace = True), drop = True表示會刪除原來的舊索引,否則預設會在原dataframe新增一列;

    pd.concat(listhere,axis=1,join_axes = [listhere[0].index]), listhere指要被合併的dataframe們,axis = 1表示按列合併,

   join_axes 設定了合併的起始點,所以要注意保證每個dataframe的索引值一致,否則會按設定的join_axes合併,其他dataframe如果沒有這個索引值,就會賦值NAN。

3)更改dataframe列的名稱,利用df.columns = list 。

4. 控制輸出為年-月-日的格式

5. 資料缺漏的插補

資料格式是以一分鐘為步長的長系列負荷,從資料庫讀入excel後存在缺漏情況,即並不是每一天的資料都有1440個點。需要把資料處理成15分鐘間隔,即1天有96個點。

Step1. 在excel中,新建一張sheet,第一列索引用excel自動填充,處理成目標範圍以1分鐘為步長的時間序列,作為index。然後使用vlookup在原始資料中比對index,這樣缺漏行會自動返回#NAN值。【由於本身計算精度問題,可能出現兩張表上同一個日期轉為數值後存在百億分之一的誤差,可先採用rounddown()處理一下,取小數點後8位數字就可以了】

這一步也可以利用dataframe的merge來操作,沒研究暫且不寫。

Step2. 利用pandas.interpolate(inplace=True)進行線性插補缺漏值。

6. Dataframe 行選擇和列選擇

在不知道列名的情況下,用索引位置選擇列,用df[[列索引]];

df.iloc[行索引],選取第X行,也可以用df.iloc[0:2]選取第0、1行,df[0:2]也是選取第0、1行。