<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    玩轉(zhuǎn) Pandas 取數(shù)

    共 7852字,需瀏覽 16分鐘

     ·

    2021-09-15 15:55

    DataFrame 數(shù)據(jù)篩選,重點(diǎn)介紹的是 3 對(duì)函數(shù)的使用:

    • iloc 和 loc,最為重要,經(jīng)常使用的一對(duì)函數(shù)
    • at 和 iat
    • any 和 all

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

    本文中模擬了兩份數(shù)據(jù):

    • 第一份的索引為字符類型
    • 第二份的索引使用的是默認(rèn)數(shù)值型
    import pandas as pd
    import numpy as np
    # 第一份模擬數(shù)據(jù) df0

    df0 = pd.DataFrame(
        [[101102140], [1149567], [87128117]],
        index=['語(yǔ)文''數(shù)學(xué)''英語(yǔ)'],
        columns=['小明''小紅',"小孫"])

    df0
    #  第二份模擬數(shù) df

    df = pd.DataFrame({
        "name":['小明','小王','張菲','關(guān)宇','孫小小','王建國(guó)','劉蓓'],
        "sex":['男','女','女','男','女','男','女'],
        "age":[20,23,18,21,25,21,24],
        "score":[np.nan,600,550,np.nan,610,580,634],  # 缺失兩條數(shù)據(jù)
        "address":[
            "廣東省深圳市南山區(qū)",
            np.nan,  # 數(shù)據(jù)缺失
            "湖南省長(zhǎng)沙市雨花區(qū)",
            "北京市東城區(qū)",
            "廣東省廣州市白云區(qū)",
            "湖北省武漢市江夏區(qū)",
            "廣東省深圳市龍華區(qū)"
            ]
    })

    df

    二、iloc和loc

    iloc 是通過(guò)數(shù)值來(lái)進(jìn)行篩選,loc 是通過(guò)屬性或者行索引名來(lái)進(jìn)行篩選

    2.1 iloc

    直接指定數(shù)值,取出單行記錄

    # 1、使用數(shù)值

    df1 = df.iloc[1]  # 單個(gè)數(shù)值取出的行記錄
    df1

    # 結(jié)果
    name          小王
    sex            女
    age           23
    score      600.0
    address      NaN
    Name: 1, dtype: object

    使用冒號(hào)表示全部

    df1 = df.iloc[1,:]  # :冒號(hào)表示全部
    df1

    # 結(jié)果
    name          小王
    sex            女
    age           23
    score      600.0
    address      NaN
    Name: 1, dtype: object

    還可以使用切片來(lái)取數(shù):

    df1 = df.iloc[:3]  # 取出前3行記錄
    df1

    取出非連續(xù)的多行記錄:

    df2 = df.iloc[[1,2,4]]  # 取出多行記錄
    df2

    namesexagescoreaddress
    1小王23600.0NaN
    2張菲18550.0湖南省長(zhǎng)沙市雨花區(qū)
    4孫小小25610.0廣東省廣州市白云區(qū)
    # 2、取出行記錄的部分列屬性

    df3 = df.iloc[2,0:2]
    df3

    # 結(jié)果
    name    張菲
    sex      女
    Name: 2, dtype: object
    # 列方向上使用切片,步長(zhǎng)為2

    df4 = df.iloc[2,0:5:2]  
    df4

    # 結(jié)果
    name              張菲
    age               18
    address    湖南省長(zhǎng)沙市雨花區(qū)
    Name: 2, dtype: object
    # 行索引為2,列索引號(hào)為1 和 3

    df5 = df.iloc[2,[1,3]]  
    df5

    # 結(jié)果
    sex          女
    score    550.0
    Name: 2, dtype: object
    # 3、取出具體的值

    df6 = df.iloc[2,4]
    df6

    # 結(jié)果
    '湖南省長(zhǎng)沙市雨花區(qū)'

    在行和列方向上同時(shí)使用切片,還可以指定步長(zhǎng):

    # 4、行和列方向同時(shí)使用切片

    df7 = df.iloc[0:4,0:6:2]
    df7

    和原數(shù)據(jù)進(jìn)行對(duì)比一下:

    ?。?!一個(gè)非常有用的方法:np.r_,幫助我們?nèi)〕龇沁B續(xù)的列屬性

    # 5、取出不連續(xù)的行列數(shù)據(jù),使用np.r_

    df8 = df.iloc[:, np.r_[0,2:4]]
    df8

    nameagescore
    0小明20NaN
    1小王23600.0
    2張菲18550.0
    3關(guān)宇21NaN
    4孫小小25610.0
    5王建國(guó)21580.0
    6劉蓓24634.0
    df9 = df.iloc[np.r_[0,2:4],:]
    df9

    namesexagescoreaddress
    0小明20NaN廣東省深圳市南山區(qū)
    2張菲18550.0湖南省長(zhǎng)沙市雨花區(qū)
    3關(guān)宇21NaN北京市東城區(qū)

    2.2 loc

    使用的行索引名或者列屬性直接來(lái)取數(shù)

    # 1、取出單個(gè)列

    df10 = df.loc[:,"name"]  
    df10
    0     小明
    1 小王
    2 張菲
    3 關(guān)宇
    4 孫小小
    5 王建國(guó)
    6 劉蓓
    Name: name, dtype: object
    # 2、取多個(gè)列

    df11 = df.loc[:,[
    "name","age"]]  
    df11
    #  3、使用數(shù)值,取出第一行,索引為0

    df12 = df.loc[0]
    df12

    name              小明
    sex                男
    age               20
    score            NaN
    address    廣東省深圳市南山區(qū)
    Name: 0, dtype: object
    # 4、取出索引為0,1,3的行記錄,此時(shí)列字段是全部保留

    df13 = df.loc[[0,1,3]]
    df13
    # 使用冒號(hào):,表示全部列,效果同上

    df14 = df.loc[[0,1,3],:]  
    df14
    # 5、取出部分行和部分列

    df15 = df.loc[[0,1,3],["name","sex","score"]]
    df15
    # 6、!!!使用索引切片:同時(shí)包含起止位置

    df16 = df.loc[0:3]
    df16
    df.loc[:]  # 表示所有數(shù)據(jù)
    # 7、列篩選的時(shí)候,必須有行元素

    # 所有行的name和score兩列
    df17 = df.loc[:,["name","score"]]
    df17

    namescore
    0小明NaN
    1小王600.0
    2張菲550.0
    3關(guān)宇NaN
    4孫小小610.0
    5王建國(guó)580.0
    6劉蓓634.0
    # 所有行的age及后面全部列

    df18 = df.loc[:,"age":]
    df18

    agescoreaddress
    020NaN廣東省深圳市南山區(qū)
    123600.0NaN
    218550.0湖南省長(zhǎng)沙市雨花區(qū)
    321NaN北京市東城區(qū)
    425610.0廣東省廣州市白云區(qū)
    521580.0湖北省武漢市江夏區(qū)
    624634.0廣東省深圳市龍華區(qū)
    # 8、部分行,age及其后面的全部列

    # 謹(jǐn)記:包含起止位置,這是和python切片不同的地方

    df19 = df.loc[1:3,"age":]
    df19

    agescoreaddress
    123600.0NaN
    218550.0湖南省長(zhǎng)沙市雨花區(qū)
    321NaN北京市東城區(qū)
    # 9、針對(duì)非數(shù)值型行索引的取數(shù)

    df20 = df0.loc["語(yǔ)文"]
    df20
    小明    101
    小紅 102
    小孫 140
    Name: 語(yǔ)文, dtype: int64
    # 10、注意兩個(gè)方括號(hào)取出的是DataFrame數(shù)據(jù),單個(gè)括號(hào)是Series型數(shù)據(jù)

    df0.loc[["語(yǔ)文"]]

    小明小紅小孫
    語(yǔ)文101102140
    df0.loc[["語(yǔ)文","英語(yǔ)"]]

    小明小紅小孫
    語(yǔ)文101102140
    英語(yǔ)87128117
    # 11、取出部分行和列數(shù)據(jù)

    df21 = df0.loc[["語(yǔ)文","英語(yǔ)"],"小明"]  
    df21

    語(yǔ)文    101
    英語(yǔ)     87
    Name: 小明, dtype: int64
    df0.loc[["語(yǔ)文","英語(yǔ)"],["小明","小孫"]]  

    小明小孫
    語(yǔ)文101140
    英語(yǔ)87117
    # 12、直接使用行索引名來(lái)取數(shù)

    df0.loc[["語(yǔ)文","英語(yǔ)"]]

    小明小紅小孫
    語(yǔ)文101102140
    英語(yǔ)87128117

    2.3 兩者對(duì)比

    df.loc[[1,2]]

    namesexagescoreaddress
    1小王23600.0NaN
    2張菲18550.0湖南省長(zhǎng)沙市雨花區(qū)
    df.iloc[[1,2]]

    namesexagescoreaddress
    1小王23600.0NaN
    2張菲18550.0湖南省長(zhǎng)沙市雨花區(qū)
    # 指定我們需要的列屬性名

    df.loc[[1,2],["name","score"]]  

    namescore
    1小王600.0
    2張菲550.0
    # 取出第1和2行,0和3列

    df.iloc[[1,2],np.r_[0,3]]

    namescore
    1小王600.0
    2張菲550.0

    三、at 和 iat

    3.1 at

    at 函數(shù)類似于 loc,但是 at 函數(shù)取出的僅僅是一個(gè)值

    df22 = df.at[4,"sex"]
    df22

    '女'
    df.at[2,"name"]

    '張菲'
    df0

    小明小紅小孫
    語(yǔ)文101102140
    數(shù)學(xué)1149567
    英語(yǔ)87128117
    # 同時(shí)指定索引和列名

    df23 = df0.at['語(yǔ)文','小孫']
    df23

    140
    # at、loc連用

    df.loc[1].at['age']

    23
    df

    namesexagescoreaddress
    0小明20NaN廣東省深圳市南山區(qū)
    1小王23600.0NaN
    2張菲18550.0湖南省長(zhǎng)沙市雨花區(qū)
    3關(guān)宇21NaN北京市東城區(qū)
    4孫小小25610.0廣東省廣州市白云區(qū)
    5王建國(guó)21580.0湖北省武漢市江夏區(qū)
    6劉蓓24634.0廣東省深圳市龍華區(qū)
    # 列名為name的第4個(gè)元素
    df.name.at[4]   

    '孫小小'

    3.2 iat

    和 iloc 一樣,僅僅支持對(duì)數(shù)字索引操作

    df24 = df.iat[2,4]
    df24

    '湖南省長(zhǎng)沙市雨花區(qū)'
    df.loc[2].iat[4]

    '湖南省長(zhǎng)沙市雨花區(qū)'
    df.iloc[2].iat[4]

    '湖南省長(zhǎng)沙市雨花區(qū)'

    四、any 和 all

    • any:如果至少有一個(gè)為 True,則為 True
    • all:需要所有結(jié)果為 True,才會(huì)為 True

    當(dāng)傳入的 axis=1,會(huì)按照行進(jìn)行查詢;axis=0 表示按照列查詢

    4.1 在 Series 數(shù)據(jù)的比較

    # 兩個(gè) False 通過(guò) any 結(jié)果為 False

    pd.Series([FalseFalse]).any()   # False
    pd.Series([TrueFalse]).any()  # True
    pd.Series([TrueFalse]).all()  # False
    # any:是否跳過(guò)空值

    pd.Series([np.nan]).any()  # False
    pd.Series([np.nan]).any(skipna=False)  # True
    # all:是否跳過(guò)空值

    pd.Series([np.nan]).all()  # True
    pd.Series([np.nan]).all(skipna=False)  #True  

    4.2 在 DataFrame 的比較

    df0

    小明小紅小孫
    語(yǔ)文101102140
    數(shù)學(xué)1149567
    英語(yǔ)87128117
    # 1、取出待查詢的數(shù)據(jù)
    df0.loc[:,["小明","小紅"]]

    小明小紅
    語(yǔ)文101102
    數(shù)學(xué)11495
    英語(yǔ)87128
    # 2、進(jìn)行比較
    df0.loc[:,["小明","小紅"]] >= 100

    小明小紅
    語(yǔ)文TrueTrue
    數(shù)學(xué)TrueFalse
    英語(yǔ)FalseTrue

    any

    # 3、使用any函數(shù)篩選

    df0[(df0.loc[:,["小明","小紅"]] >= 100).any(1)]

    all

    只有語(yǔ)文同時(shí)滿足 3 個(gè)人都大于 100

    # 4、使用all函數(shù)篩選:只有語(yǔ)文滿足3個(gè)人同時(shí)大于100

    df0[(df0.loc[:,["小明","小紅"]] >= 100).all(1)]

    五、總結(jié)

    本文通過(guò)模擬的數(shù)據(jù)介紹了pandas 的 3 對(duì)函數(shù)使用。其中 loc 和 iloc 函數(shù)是十分常用和實(shí)用的函數(shù),經(jīng)常會(huì)使用。至此,pandas 的數(shù)據(jù)篩選部分已經(jīng)全部介紹完成。

    當(dāng)然介紹的方法只是 pandas 豐富取數(shù)技巧中的部分,還有很多的函數(shù)和方法需要讀者自己平時(shí)去學(xué)習(xí)和積累,希望介紹的方法對(duì)大家有所幫助。

    從下一篇文章開(kāi)始,將會(huì)介紹 Pandas 中的各種操作技巧。

    瀏覽 86
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    屄日本屄国产的 | 色亚洲色图 | 99在线精品视频免费观看软件 | 青娱乐 AV | igao在线 |