初學pandas(七)坑爹版本與resamp

2021-07-30 22:18:22 字數 2202 閱讀 5308

起因是寫好的一程式,放到伺服器上跑就失敗了。搜尋網上半天沒找著原因。

pandas有個庫可以讓一時間序列按周(月或年等)彙總,如進行資料分析的時候,需要將不均勻的時間戳資料按照月來彙總排列,那麼就需要用到resample函式。使用resample有個要求,就是dataframe的index要為時間序列型別的。一般的index不是從0到n,就是字串,那樣的話沒辦法resample。所以我們要這麼轉換,隨便取一列,或者從別的地方給它安插一列時間型別的index,構成時間序列:

time_series = data[['date', 'quantity']]

time_list = pd.to_datetime(time_series['date'])  

# 轉換序列為時間序列

time_series = time_series.set_index(time_list)  

# 設定時間序列作為行標籤

if pd.__version__ >= "0.18.0":

time_series = time_series.resample("w-sun").sum()

else:

time_series = time_series.resample("w-sun", how='sum')

time_series = time_series.shift(-6, freq='d')

time_series = time_series.dropna(how='any')

如**所示,假設我們有乙個n列資料叫data,我們取其中的date列和quantity列作為乙個新的dataframe。但此時我們是不能進行resample的。有人說是不是把date列作為index就可以了呢?答案也是否定的,因為目前date還是字串的狀態,不是乙個時間序列。為了構成時間序列,我們需要使用pd.to_datetime函式和date列構造乙個時間列表time_list,並把這樣乙個列表設定成time_series的index,這樣才完整構造乙個時間序列。

接下來就是不同系統之間數字出錯的問題了。原來,pandas公升級到18版本後,對resample函式進行了重大的改造,因此我們為了新增不同系統的適用性,必須加入乙個pd.__version__的版本判斷,才能適應不同版本的pandas。

if pd.__version__ >= "0.18.0":

time_series = time_series.resample("w-sun").sum()

else:

time_series = time_series.resample("w-sun", how='sum')

接著,就不得不說到resample的統計方式。如果我們按周統計,那麼就有個問題:到底是按週幾來統計呢?我們發現如下引數"w-sun",意思是從上週一統計到週日,然後打上了週日的時間戳。同理"w-mon"是從上周二統計到這周一,並打上這周一的標籤。

【這裡隨便編個例子舉例,如2023年7月份】

日 一 二 三 四 五 六

10  

11  

12  

13  

14  

15  

1617  

18  

19  

20  

21  

22  

23如果我們使用resample函式和引數"w_mon",那麼:

date, quantity

2016-7-18, 354

意味著7-12、7-13、7-14、7-15、7-16、7-17、7-18這7天的資料結合在一起,成為7月18日周一這個時間戳的資料。

而如果我們resample函式和引數"w_sun",那麼:

date, quantity

2016-7-17, 301

意味著7-11、7-12、7-13、7-14、7-15、7-16、7-17這7天的資料結合在一起,成為7月18日周一這個時間戳的資料。

如果我們想用7月11號周一來表示7-11、7-12、7-13、7-14、7-15、7-16、7-17這7天資料的時間戳,就必須對時間序列進行平移shift:

time_series = time_series.shift(-6, freq='d')

這樣平移 -6 天後,時間戳就從7-17變成了7-11星期一

最後就是根據需求和個人喜好去除沒有資料點的時間戳:

time_series = time_series.dropna(how='any')

附錄,坑爹的版本公升級問題:

python坑爹的黑店 1023 坑爹的黑店

題目描述 今天小明去了乙個風景如畫的地方散心,但是自己帶的飲料喝完了,小明口渴難耐,見不遠處有家小商店,於是跑去買飲料。小明 我要買飲料!店主 我們這裡有三種飲料,礦泉水1.5元一瓶,可樂2元一瓶,橙汁3.5元一瓶。小明 好的,給我一瓶礦泉水。說完他掏出一張n元的大鈔遞給店主。小明 小明環顧四周,就...

assetbundle 坑爹總結

1 當乙個被打包的資源a引用了其他的資源b,並且沒有被打成乙個包時,要選用 buildassetbundleoptions.collectdependencies 收集依賴關係 或者 buildassetbundleoptions.completeassets 完整資源 兩者並不衝突可以全選 來進行...

坑爹的if語句

前兩天的時候,自己在修改 的時候,自己感覺對除錯比較有心得體會了。但遇到乙個問題,總在乙個函式中返回了false,明明條件就是不應該返回。修改前的示例 如下 string topic topic is not empty if topic.empty return false 我想對這行 加乙個日誌...