五花八門的 Pandas 篩選數據

2021-12-29 Python大咖談

今天繼續帶來 Pandas 的花樣取數技巧,本文中重點介紹的方法:


一、模擬數據

下面是完全模擬的一份數據,包含:姓名、性別、年齡、數學、語文、總分、地址共 7 個欄位信息。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "name":['小明','小王','張菲','關宇','孫小小','王建國','劉蓓'],
    "sex":['男','女','女','男','女','男','女'],
    "age":[20,23,18,21,25,21,24],
    "math":[120,130,118,120,102,140,134],
    "chinese":[100,130,140,120,149,111,118],
    "score":[590,600,550,620,610,580,634], 
    "address":["廣東省深圳市南山區",
               "北京市海澱區",
               "湖南省長沙市雨花區",
               "北京市東城區",
               "廣東省廣州市白雲區",
               "湖北省武漢市江夏區",
               "廣東省深圳市龍華區"
              ]
})

df

下面開始詳細介紹 5 種取數方法:

二、表達式取數

表達式取數指的是通過表達式來指定一個或者多個篩選條件來取數。

1、指定一個數學表達式

# 1、數學表達式
df[df['math'] > 125]

2、取反操作

取反操作是通過符號~來實現的

# 2、取反操作
df[~(df['sex'] == '男')]  # 取出不是男生的數據

3、指定某個屬性的值為具體的數據

# 3、指定具體數據
df[df.sex == '男']  # 等同於 df[df['sex'] == '男']

4、不等式表達式

# 4、比較表達式
df[df['math'] > df['chinese']]

5、邏輯運算符

# 5、邏輯運算符
df[(df['math'] > 120) & (df['chinese'] < 140)]

三、query()函數 3.1 使用說明

⚠️在使用的時候需要注意的是:如果我們列屬性中存在空格,我們需要使用反引號將其括起來再進行使用。

3.2 使用案例

1、使用數值型表達式

df.query('math > chinese > 110')

df.query('math + chinese > 255')

df.query('math == chinese')

df.query('math == chinese > 120')

df.query('(math > 110) and (chinese < 135)')  # 兩個不等式

2、使用字符型表達式

df.query('sex != "女"')  # 不等於女,就是全部男

df.query('sex not in ("女")')  # 不在女中就是男

df.query('sex in ("男","女")')   # 性別在男女中就是全部人

3、傳入變量;變量在使用的時候需要在前面加上@

# 設置變量
a = df.math.mean()
a

df.query('math > @a + 10')

df.query('math < (`chinese` + @a) / 2')

四、eval()函數

eval函數的使用方法和query函數是相同的

1、使用數值型表達式

# 1、數值型表達式
df.eval('math > 125')   # 得到的是bool表達式

df[df.eval('math > 125')]

df[df.eval('math > 125 and chinese < 130')]

2、字符型表達式

# 2、字符型表達式
df[df.eval('sex in ("男")')]

3、使用變量

# 3、使用變量
b = df.chinese.mean()  # 求均值
df[df.eval('math < @b+5')]

五、filter函數

我們使用filter可以對列名或者行名進行篩選,使用方法:

其中axis=1指定列名;axis=0指定索引

5.1 使用說明5.2 使用案例

1、直接指定屬性名

df.filter(items=["chinese","score"])   # 列名操作

直接指定行索引

df.filter(items=[2,4],axis=0)   # 行篩選

2、通過正則指定

df.filter(regex='a',axis=1)  # 列名中包含

df.filter(regex='^s',axis=1)  # 列名以s開始

df.filter(regex='e$',axis=1)  # 列名以e結束

df.filter(regex='3$',axis=0)  # 行索引包含3

3、模糊指定

df.filter(like='s',axis=1)   # 列名中包含s

df.filter(like='2',axis=0)   # 行索引包含2

# 同時指定列名和索引
df.filter(regex='^a',axis=1).filter(like='2',axis=0)

六、where和mask函數

where和mask函數是一對相反的函數,取出來的結果剛好是相反的:

where:取出滿足要求的數據,不滿足的顯示為NaNmask:取出不滿足要求的數據,滿足的顯示為NaN

兩種方法都可以將將NaN值設置我們指定的數據

6.1 where使用
s = df["score"]
s

# where:滿足條件的直接顯示,不滿足的顯示為NaN
s.where(s>=600)

我們可以給不滿足要求的數據進行賦值:

# 我們可以給不滿足的進行賦值
s.where(s>=610,600)  # 不滿足條件的賦值為600 

看看兩組結果的對比:

where函數還可以指定多個條件:

# 符合條件的返回True,不符合的返回False
df.where((df.sex=='男') & (df.math > 125))

選出我們想要的數據:

df[(df.where((df.sex=='男') & (df.math > 125)) == df).name]
# df[(df.where((df.sex=='男') & (df.math > 125)) == df).sex]  效果相同

6.2 mask函數

mask函數獲取到的結果和where是相反的

s.mask(s>=600)  # 和where相反:返回的都是小於600的數據

s.mask(s>=610, 600)  # 不滿足條件的賦值為600 

mask函數接受多個條件:

# 取值和where相反
df[(df.mask((df.sex=='男') & (df.math > 125)) == df).sex]

七、總結

Pandas中取數的方法真的五花八門,太多技巧可以獲取到我們想要的數據,有時候不同的方式也可以得到相同的數據。本文中著重介紹的通過表達式和5個函數來取數,下篇文章中將會重點講解3對函數篩選數據的方法。

相關焦點

  • Pandas 數據篩選清洗
    Colorado', 'Ohio'])data.drop('two', axis=1)data.drop(['two', 'four'], axis='columns')data.drop('two', axis=1,inplace=True)處理缺失值Pandas中,將缺失值設置為NA,即Not Available,dropna根據每個標籤的值是否是缺失數據來篩選軸標籤
  • pandas 篩選數據的 8 個神操作
    日常用Python做數據分析最常用到的就是查詢篩選了,按各種條件、各種維度以及組合挑出我們想要的數據,以方便我們分析挖掘。東哥總結了日常查詢和篩選常用的種神操作,供各位學習參考。本文採用sklearn的boston數據舉例介紹。
  • pandas 篩選數據的 8 個騷操作
    日常用Python做數據分析最常用到的就是查詢篩選了,按各種條件、各種維度以及組合挑出我們想要的數據,以方便我們分析挖掘。東哥總結了日常查詢和篩選常用的種騷操作,供各位學習參考。本文採用sklearn的boston數據舉例介紹。
  • Pandas 數據結構 - Series
    Pandas Series 類似表格中的一個列(column),類似於一維數組,可以保存任何數據類型。
  • Pandas 數據類型操作
    本文總結了 Pandas 中進行數據類型轉換的三種基本方法,同時介紹了基於數據類型取數的方法:使用 Pandas 提供的函數如 to_numeric()、to_datetime() 等進行轉化一、Pandas、Python、Numpy 各自支持的數據類型 下表中展示的是 Pandas
  • Python 數據分析:Pandas 進階
    概述我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹,本文我們進一步來學習 Pandas 的一些使用。2. 缺失項在現實中我們獲取到的數據有時會存在缺失項問題,對於這樣的數據,我們通常需要做一些基本處理,下面我們通過示例來看一下。
  • 100 個 pandas 數據分析函數總結
    (點擊上方快速關注並設置為星標,一起學Python)來源:數據分析1480
  • 數據分析必備利器——《Pandas 使用教程》
    Pandas 是非常著名的開源數據處理庫,我們可以通過它完成對數據集進行快速讀取、轉換、過濾、分析等一系列操作。除此之外,Pandas 擁有強大的缺失數據處理與數據透視功能,可謂是數據預處理中的必備利器。這是 Pandas 使用教程的第 1 章節,將學會安裝它,並了解 Pandas 的數據結構。
  • Pandas 輕鬆轉換數據類型
    書接上回,對獲取的數據去空去重和選擇之後,我們得到了要比較乾淨的數據,但這只是完成了第一步,在進一步計算和分析之前,還需要確定數據是否是我們想要的數據類型:比如,如果要進行數據列之間的加減乘除計算,需要數據列都是數值型(整數或小數),如果要對日期列進行篩選和計算,需要數據是日期和時間類型(2021-12-31)。
  • Pandas filter 篩選標籤
    Pandas 的 filter 方法根據指定的索引標籤對數據框行或列查詢子集。
  • 數據科學 | 從 Pandas 小白到 Pandas 能手
    在本文中,作者從 Pandas 的簡介開始,一步一步講解了 Pandas 的發展現狀、內存優化等問題。這是一篇最佳實踐教程,既適合用過 Pandas 的讀者,也適合沒用過但想要上手的小白。通過本文,你將有望發現一到多種用 pandas 編碼的新方法。Pandas 發展現狀;內存優化;索引;方法鏈;隨機提示。
  • 利用 pandas 和 xarray 整理氣象站點數據
    文件讀取與預處理import numpy as npimport pandas as pdimport xarray as xrimport matplotlib.pyplot as plt處理時間坐標,利用 datetime 將整形的年、月、日轉換為 pandas 的時間戳
  • Python 數據處理庫 pandas 進階教程
    下面是一個代碼示例:# select_data.py import pandas as pdimport numpy as np series1 = pd.Series([1, 2, 3, 4, 5, 6, 7],    index=["C", "D", "E", "F", "G", "A", "B"]
  • 盤點Pandas 的100個常用函數
    作者 | 劉順祥 來源 | 數據分析1480 這一期將分享我認為比較常規的100個實用函數,這些函數大致可以分為六類,分別是統計匯總函數、數據清洗函數、數據篩選、繪圖與元素級運算函數、時間序列函數和其他函數。
  • 數據分析利器 pandas 系列教程(一):從 Series 說起
    從今天開始連載數據分析利器 pandas 的系列文章,推薦 Pycharm 集成 Python3.6+;無論你是零基礎小白,還是已經上手過 pandas,你都可以在本次系列中學到一些乾貨。摘自百度百科:pandas 是基於 numpy 的一種工具,該工具是為了解決數據分析任務而創建的。
  • Pandas實用技能,數據篩選query函數詳細介紹
    來源:Python數據之道 (ID:PyDataLab)作者:陽哥大家好,我是陽哥。Pandas 可以說是 在Python數據科學領域應用最為廣泛的工具之一。在數據處理過程中,咱們經常會用到數據篩選,Pandas 中提供了數據篩選的多種方法,這裡,陽哥來給大家分享下 在Pandas中應用 query 函數來進行數據篩選。
  • 一次性總結了 pandas 提取數據的 15 種方法,統統只需 1 行代碼
    數據分析必備工具,它有強大的數據清洗能力,往往能用非常少的代碼實現較複雜的數據處理今天,總結了pandas篩選數據的15個常用技巧,主要包括5個知識點:「字符篩選:str.contains(pattern或字符串,na=False)比較函數:eq, ne, le, lt, ge, gt(相當於==,=!
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • Pandas - 操作CSV 文件
    CSV(Comma-Separated Values,逗號分隔值,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據
  • 數據處理必看:如何讓你的 pandas 循環加快 71803 倍
    雷鋒網 AI 開發者按,如果你使用 python 和 pandas 進行數據分析,那麼不久你就會第一次使用循環了。然而,即使是對小型數據集,使用標準循環也很費時,你很快就會意識到大型數據幀可能需要很長的時間。當我第一次等了半個多小時來執行代碼時,我找到了接下來想與你共享的替代方案。標準循環數據幀是具有行和列的 pandas 對象。