2017-06-29 16 views
-1

我有一個以Datetime爲索引的熊貓數據框。該指數通常是單調遞增的,但似乎有幾行不遵循這個步驟。任何快速識別這些不尋常的行?找到數據框中的非單調行

回答

0

考慮以下演示:

In [156]: df 
Out[156]: 
       val 
2017-01-01 0.889887 
2017-01-02 0.838433 
2017-01-03 0.977659 
2017-01-04 0.750143 
2017-01-05 0.271435 
1970-01-01 0.138332 # <---- !!! 
2017-01-07 0.673203 
2017-01-08 0.497589 
1999-01-01 0.592959 # <---- !!! 
2017-01-10 0.818760 

In [157]: df.loc[df.index.to_series().diff() < pd.to_timedelta('0 seconds')] 
Out[157]: 
       val 
1970-01-01 0.138332 
1999-01-01 0.592959 

In [158]: df.index.to_series().diff() < pd.to_timedelta('0 seconds') 
Out[158]: 
2017-01-01 False 
2017-01-02 False 
2017-01-03 False 
2017-01-04 False 
2017-01-05 False 
1970-01-01  True 
2017-01-07 False 
2017-01-08 False 
1999-01-01  True 
2017-01-10 False 
dtype: bool 

In [159]: df.index.to_series().diff() 
Out[159]: 
2017-01-01   NaT 
2017-01-02  1 days 
2017-01-03  1 days 
2017-01-04  1 days 
2017-01-05  1 days 
1970-01-01 -17171 days 
2017-01-07 17173 days 
2017-01-08  1 days 
1999-01-01 -6582 days 
2017-01-10  6584 days 
dtype: timedelta64[ns] 
0

「快」是指什麼資源?如果你想編程簡單,那麼簡單地做一個新的幀減去相鄰的列。任何零或負值的輸入都是您的目標。

如果您需要執行速度,請注意相鄰的差異仍然是必要的:您可以節省的是在給定行中查找多個違規的開銷。然而,除非你有一個特別寬的數據框架,否則很可能你會在短路時損失更多,而不是通過保存的減法獲得。還要注意,具有矩陣運算或其他並行性的處理器對於整個數據幀來說足夠快,檢查會花費您大量的時間。

相關問題