起因是寫好的一程式,放到伺服器上跑就失敗了。搜尋網上半天沒找著原因。
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 我想對這行 加乙個日誌...