2017-02-02 76 views
0

熊貓有類似於dplyr的filter()操作嗎? 基本上我希望能夠根據謂詞刪除行。如何使用方法鏈從pandas DataFrame中刪除行?

我當然可以做df = df[condition],但是這並不像方法鏈那樣好。

+0

大熊貓有一個['filter'](http://pandas.pydata.org /pandas-docs/stable/generated/pandas.DataFrame.filter.html#pandas.DataFrame.filter)方法,但是這需要一系列標籤,通常會使用謂詞來製作一個掩碼並通過這個 – EdChum

回答

0

使用query

考慮數據框df

df = pd.DataFrame(
    np.random.randint(-5, 6, (10, 10)), 
    columns=list('ABCDEFGHIJ')) 

df 

    A B C D E F G H I J 
0 0 4 -1 1 -3 -1 -4 -5 -1 2 
1 -4 2 -1 0 5 -1 1 -3 1 4 
2 3 -2 3 -2 -4 5 1 1 0 -2 
3 1 4 -5 4 -3 -3 -3 -3 -4 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
7 5 2 5 2 3 2 3 -3 1 1 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

您可以輕鬆地根據過濾條件流水線作業

df.query('A < 0') 

    A B C D E F G H I J 
1 -4 2 -1 0 5 -1 1 -3 1 4 
4 -3 4 4 5 -2 -3 -1 3 3 -1 
6 -2 1 2 0 -1 -1 1 0 4 -4 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

可以包括多個條件

df.query('A < 0 & B < -1') 

    A B C D E F G H I J 
8 -2 -5 1 4 0 -1 4 4 -5 3 
9 -3 -2 -5 0 -5 -2 -2 2 0 -1 

你可以做很多很酷的事情

df.query('-3 < A < 3 & H * J > 0') 

    A B C D E F G H I J 
5 0 0 -1 -1 2 2 5 -4 -1 -1 
8 -2 -5 1 4 0 -1 4 4 -5 3 

而這一切都被返回爲數據幀,使接下來的操作

+0

完成這項工作非數字列上的謂詞? – daj

+0

是的,如果您提供樣本數據以及您想如何處理它。我們可以告訴你如何去做。 – piRSquared

+0

如果我想傳遞更復雜的函數,或者我不想通過這樣的字符串進行編碼,該怎麼辦?還有其他選擇嗎? – mdeland

相關問題