<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          五花八門的 Pandas 篩選數(shù)據(jù)

          共 4854字,需瀏覽 10分鐘

           ·

          2021-06-30 20:43

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

          • 表達(dá)式取數(shù)
          • query、evel
          • filter
          • where、mask

          一、模擬數(shù)據(jù)

          下面是完全模擬的一份數(shù)據(jù),包含:姓名、性別、年齡、數(shù)學(xué)、語文、總分、地址共 7 個字段信息。

          import pandas as pd
          import numpy as np

          df = pd.DataFrame({
              "name":['小明','小王','張菲','關(guān)宇','孫小小','王建國','劉蓓'],
              "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":["廣東省深圳市南山區(qū)",
                         "北京市海淀區(qū)",
                         "湖南省長沙市雨花區(qū)",
                         "北京市東城區(qū)",
                         "廣東省廣州市白云區(qū)",
                         "湖北省武漢市江夏區(qū)",
                         "廣東省深圳市龍華區(qū)"
                        ]
          })

          df

          下面開始詳細(xì)介紹 5 種取數(shù)方法:

          1. 表達(dá)式取數(shù)
          2. query()取數(shù)
          3. eval()取數(shù)
          4. filter()取數(shù)
          5. where/mask取數(shù)

          二、表達(dá)式取數(shù)

          表達(dá)式取數(shù)指的是通過表達(dá)式來指定一個或者多個篩選條件來取數(shù)。

          1、指定一個數(shù)學(xué)表達(dá)式

          # 1、數(shù)學(xué)表達(dá)式
          df[df['math'] > 125]

          2、取反操作

          取反操作是通過符號~來實現(xiàn)的

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

          3、指定某個屬性的值為具體的數(shù)據(jù)

          # 3、指定具體數(shù)據(jù)
          df[df.sex == '男']  # 等同于 df[df['sex'] == '男']

          4、不等式表達(dá)式

          # 4、比較表達(dá)式
          df[df['math'] > df['chinese']]

          5、邏輯運(yùn)算符

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

          三、query()函數(shù)

          3.1 使用說明

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

          3.2 使用案例

          1、使用數(shù)值型表達(dá)式

          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、使用字符型表達(dá)式

          df.query('sex != "女"')  # 不等于女,就是全部男
          df.query('sex not in ("女")')  # 不在女中就是男
          df.query('sex in ("男","女")')   # 性別在男女中就是全部人

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

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

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

          四、eval()函數(shù)

          eval函數(shù)的使用方法和query函數(shù)是相同的

          1、使用數(shù)值型表達(dá)式

          # 1、數(shù)值型表達(dá)式
          df.eval('math > 125')   # 得到的是bool表達(dá)式
          df[df.eval('math > 125')]
          df[df.eval('math > 125 and chinese < 130')]

          2、字符型表達(dá)式

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

          3、使用變量

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

          五、filter函數(shù)

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

          • 直接指定
          • 正則指定
          • 模糊指定

          其中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結(jié)束
          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函數(shù)

          where和mask函數(shù)是一對相反的函數(shù),取出來的結(jié)果剛好是相反的:

          • where:取出滿足要求的數(shù)據(jù),不滿足的顯示為NaN
          • mask:取出不滿足要求的數(shù)據(jù),滿足的顯示為NaN

          兩種方法都可以將將NaN值設(shè)置我們指定的數(shù)據(jù)

          6.1 where使用

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

          我們可以給不滿足要求的數(shù)據(jù)進(jìn)行賦值:

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

          看看兩組結(jié)果的對比:

          where函數(shù)還可以指定多個條件:

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

          選出我們想要的數(shù)據(jù):

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

          6.2 mask函數(shù)

          mask函數(shù)獲取到的結(jié)果和where是相反的

          s.mask(s>=600)  # 和where相反:返回的都是小于600的數(shù)據(jù)
          s.mask(s>=610600)  # 不滿足條件的賦值為600 

          mask函數(shù)接受多個條件:

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

          七、總結(jié)

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

          瀏覽 104
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码自拍偷拍 | 日韩视频在线观看 | 亚洲精品成人 | 免费午夜福利视频 | 91沈先生探花在线 |