pandas是Python中重要的數據處理工具之一,它提供了許多數據分析功能。其中,「過濾」是pandas的重要功能之一。通過pandas的過濾功能,我們可以很容易地從數據集中過濾出需要的數據行或列。本文將介紹pandas過濾的各種技巧,以及如何使用pandas庫進行數據處理。
一、pandas過濾數據
pandas過濾數據的方式有很多種,其中最常用的方式是使用布爾索引。布爾索引是基於某個條件對DataFrame對象進行真假判斷,返回一個元素為True或False的索引數組。然後,我們使用這個索引數組來篩選出需要的數據。下面我們來看一個例子:
import pandas as pd # 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 df = df[df['A'] > 3] print(df)
上面的代碼中,我們首先使用pandas創建了一個數據集,並且對A列進行了「過濾」操作。只有大於3的行才會被保留。我們可以使用以下代碼進行驗證:
# 輸出過濾結果 print(df)
輸出結果如下:
A B 3 4 d 4 5 e
我們可以看到,只有A列大於3的行被保留下來了。
二、pandas過濾兩列相等
在pandas中,我們可以使用布爾索引來進行多列過濾。例如,我們想要保留A列和B列值相等的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 df = df[df['A'] == df['B']] print(df)
運行以上代碼後得到以下結果:
A B 0 1 a
我們可以看到,只有A列和B列的值相等的行被保留了下來。
三、pandas過濾缺失
在實際的數據處理過程中,數據中可能有一些缺失值。在pandas中,我們可以使用isna()和notna()函數來判斷一個元素是否為空。例如,我們想要找出B列中為空的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', None, 'c', 'd', 'e']}) # 進行過濾操作 df = df[df['B'].isna()] print(df)
運行以上代碼後得到以下結果:
A B 1 2 None
我們可以看到,只有B列為空的行被保留了下來。
四、pandas過濾行
在pandas中,我們可以使用iloc或loc函數來選擇需要的行。iloc是根據行號和列號來選擇數據的,在對應行號和列號的位置處取出數據;loc則是根據標籤名來選擇數據的。例如,我們想要取出第二行的數據,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 df = df.iloc[1, :] print(df)
運行以上代碼後得到以下結果:
A 2 B b Name: 1, dtype: object
我們可以看到,只有第二行的數據被保留了下來。
五、pandas過濾多值
在pandas中,我們可以用isin()函數選擇數據集中的多個值。例如,我們想要保留A列中等於1或等於3的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 df = df[df['A'].isin([1, 3])] print(df)
運行以上代碼後得到以下結果:
A B 0 1 a 2 3 c
我們可以看到,只有A列等於1或等於3的行被保留了下來。
六、pandas過濾掉異常值
在數據分析中,我們經常需要過濾掉一些異常值。在pandas中,我們可以使用describe()函數來查看數據分布情況,並根據分析結果對數據進行過濾。例如,我們想要過濾掉A列中大於均值兩倍標準差的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 50], 'B': ['a', 'b', 'c', 'd', 'e']}) # 查看數據分布情況 print(df.describe()) # 進行過濾操作 df = df[df['A'] < df['A'].mean() + 2 * df['A'].std()] print(df)
運行以上代碼後得到以下結果:
A count 5.000000 mean 12.000000 std 19.874607 min 1.000000 25% 2.000000 50% 3.000000 75% 4.000000 max 50.000000 A B 0 1 a 1 2 b 2 3 c 3 4 d
我們可以看到,A列中大於均值兩倍標準差的行被過濾掉了。
七、pandas過濾字元串
在pandas中,我們可以使用str.contains()和str.startswith()函數來過濾包含特定字元串的行或者以特定字元串開頭的行。例如,我們想要過濾出B列中包含字元「a」的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'ad', 'e']}) # 進行過濾操作 df = df[df['B'].str.contains('a')] print(df)
運行以上代碼後得到以下結果:
A B 0 1 a 3 4 ad
我們可以看到,只有B列包含字元「a」的行被保留了下來。
八、pandas過濾出所需要的行
在pandas中,我們可以使用query()函數來篩選出需要的行。query()函數可以接收一個表達式字元串,並根據該表達式字元串返回需要的行。例如,我們想要過濾出A列中等於1或等於3的行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 df = df.query('A==1 | A==3') print(df)
運行以上代碼後得到以下結果:
A B 0 1 a 2 3 c
我們可以看到,只有A列等於1或等於3的行被保留了下來。
九、pandas過濾值大於門限的數據行
在實際的數據分析中,我們經常需要對某列數據進行分析,然後篩選出那些不符合要求的數據行。例如,我們想要過濾掉A列中大於門限的數據行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行過濾操作 thresh = 3 df = df[df['A'] <= thresh] print(df)
運行以上代碼後得到以下結果:
A B 0 1 a 1 2 b 2 3 c
我們可以看到,只有A列中小於或等於門限的數據行被保留了下來。
十、pandas模糊查詢選取
在pandas中,我們可以使用str.contains()來模糊查詢選取數據。例如,我們想要選取B列中包含字母「a」的數據行,可以使用以下代碼:
# 創建數據集 df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e']}) # 進行模糊查詢 df = df[df['B'].str.contains('a')] print(df)
運行以上代碼後得到以下結果:
A B 0 1 a
我們可以看到,只有B列中包含字母「a」的數據行被保留了下來。
結束語
本文介紹了10種pandas過濾數據的方法,包括使用布爾索引、多列過濾、缺失值過濾、使用iloc和loc函數選擇行、使用isin()函數選擇多個值、過濾掉異常值、使用str.contains()和str.startswith()函數過濾字元串、使用query()函數篩選出需要的行、過濾值大於門限的數據行、模糊查詢選取數據。掌握這些技巧後,我們可以對數據進行快速的篩選和過濾操作,從而更加高效地進行數據分析。
原創文章,作者:GGWM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132026.html