您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Pandas多個條件中怎么提取行”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Pandas多個條件中怎么提取行”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
使用Pandas從多個條件(AND,OR,NOT)中提取行的方法。
有以下2點需要注意:
&,|,?的使用(and、or、not的錯誤)
使用比較運算符時,請將每個條件括在括號中。
以下數據為例。
import pandas as pd df = pd.read_csv('./data/09/sample_pandas_normal.csv') print(df) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57
本例是使用pandas.DataFrame,但pandas.Series也同樣適用。
首先,展示如何從pandas.DataFrame中提取(選擇)行以獲得新的pandas.DataFrame。
使用布爾列表(數組)或pandas.Series,只能提取(選擇)True行。
mask = [True, False, True, False, True, False] df_mask = df[mask] print(df_mask) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88
具有兩個條件值的pandas.Series,可以使用&獲得如下結果。在這里,為了便于說明,將==和?用作二個條件,但是僅使用!=也是可以。
print(df['age'] < 35) # 0 True # 1 False # 2 True # 3 False # 4 True # 5 True # Name: age, dtype: bool print(~(df['state'] == 'NY')) # 0 False # 1 True # 2 True # 3 True # 4 True # 5 False # Name: state, dtype: bool print((df['age'] < 35) & ~(df['state'] == 'NY')) # 0 False # 1 False # 2 True # 3 False # 4 True # 5 False # dtype: bool
僅提取(選擇)True行。
df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')] print(df_and) # name age state point # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88
對于OR也是如此。使用|。
print((df['age'] < 20) | (df['point'] > 90)) # 0 False # 1 True # 2 True # 3 False # 4 False # 5 False # dtype: bool df_or = df[(df['age'] < 20) | (df['point'] > 90)] print(df_or) # name age state point # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70
運算符的優先級是NOT(?),AND(&),OR(|)。因此,結果因順序而異。
df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)] print(df_multi_1) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57 df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')] print(df_multi_2) # name age state point # 0 Alice 24 NY 64 # 1 Bob 42 CA 92 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 4 Ellen 24 CA 88 # 5 Frank 30 NY 57
將每個組括在括號中比較安全。
df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)] print(df_multi_3) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 3 Dave 68 TX 70 # 5 Frank 30 NY 57
讀到這里,這篇“Pandas多個條件中怎么提取行”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。