我想刪除的是小於10,大於25我的樣本數據幀的行會看起來像這樣熊貓放棄與值小於給定值的行
a b c
1 2 3
4 5 16
11 24 22
26 50 65
預期輸出:
a b c
1 2 3
4 5 16
26 50 65
因此,如果該行具有小於10或大於25的任何一個值,則該行將保留在數據幀中,否則需要將其丟棄。
有什麼辦法可以通過熊貓來實現,而不是遍歷所有的行?
我想刪除的是小於10,大於25我的樣本數據幀的行會看起來像這樣熊貓放棄與值小於給定值的行
a b c
1 2 3
4 5 16
11 24 22
26 50 65
預期輸出:
a b c
1 2 3
4 5 16
26 50 65
因此,如果該行具有小於10或大於25的任何一個值,則該行將保留在數據幀中,否則需要將其丟棄。
有什麼辦法可以通過熊貓來實現,而不是遍歷所有的行?
您可以撥打apply並將結果返回到名爲'Keep'的新列。然後,您可以使用此列刪除不需要的行。
import pandas as pd
l = [[1,2,3],[4,5,6],[11,24,22],[26,50,65]]
df = pd.DataFrame(l, columns = ['a','b','c']) #Set up sample dataFrame
df['keep'] = df.apply(lambda row: sum(any([(x < 10) or (x > 25) for x in row])), axis = 1)
any()
函數返回一個生成器。調用sum(generator)
只是返回存儲在生成器中的所有結果的總和。
檢查this關於any()
如何工作。 Apply函數仍然像for循環一樣迭代所有行,但代碼看起來更清晰。我無法想象如何在不遍歷所有行的情況下執行此操作。
輸出:
a b c keep
0 1 2 3 1
1 4 5 6 1
2 11 24 22 0
3 26 50 65 1
df = df[df['keep'] == 1] #Drop unwanted rows
謝謝拉克什。這對我有效。 –
很棒的回答!我是熊貓新手,想知道這是否更有效地「循環」數據框。我不知道熊貓的數據框是如何在引擎下實現的,但這似乎是兩次迭代它。 請問我可以給我一些解釋嗎? – mimre
應用函數只是循環的語法糖。即使你編寫了一個for循環遍歷所有行,我也不確定是否有辦法動態刪除行。 –
好運。我希望你能照顧好你的行。 –
就像一個供參考,這不是你如何問SO的問題。你應該表現出一些最小的努力。如果你有資源在這裏提出問題,你有資源做一些自我檢索。 –
爲什麼第一行和最後一行仍然在您的預期輸出中?這沒有任何意義。 –