熊貓有類似於dplyr的filter()操作嗎? 基本上我希望能夠根據謂詞刪除行。如何使用方法鏈從pandas DataFrame中刪除行?
我當然可以做df = df[condition]
,但是這並不像方法鏈那樣好。
熊貓有類似於dplyr的filter()操作嗎? 基本上我希望能夠根據謂詞刪除行。如何使用方法鏈從pandas DataFrame中刪除行?
我當然可以做df = df[condition]
,但是這並不像方法鏈那樣好。
使用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
而這一切都被返回爲數據幀,使接下來的操作
完成這項工作非數字列上的謂詞? – daj
是的,如果您提供樣本數據以及您想如何處理它。我們可以告訴你如何去做。 – piRSquared
如果我想傳遞更復雜的函數,或者我不想通過這樣的字符串進行編碼,該怎麼辦?還有其他選擇嗎? – mdeland
大熊貓有一個['filter'](http://pandas.pydata.org /pandas-docs/stable/generated/pandas.DataFrame.filter.html#pandas.DataFrame.filter)方法,但是這需要一系列標籤,通常會使用謂詞來製作一個掩碼並通過這個 – EdChum