亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python pandas dataframe多列篩選方式

 更新時(shí)間:2023年09月12日 09:52:30   作者:宇宙全能王  
這篇文章主要介紹了python pandas dataframe多列篩選方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python pandas dataframe多列篩選

# 括號(hào)不能少
data[(data['age']>20) & (data['height']>176)]

Python dataframe 多條件篩選/過濾數(shù)據(jù)的方法及函數(shù)isin,query,contains,loc使用

1. 背景概述

日常的數(shù)據(jù)分析中,經(jīng)常要根據(jù)各種不同的條件從數(shù)據(jù)集中篩選出相應(yīng)的數(shù)據(jù)記錄,再進(jìn)行提取、替換、修改和分析等操作。

因此篩選是數(shù)據(jù)分析中使用頻率最高的操作之一。在剛開始做數(shù)據(jù)分析的時(shí)候,常常是使用for循環(huán)在數(shù)據(jù)集中進(jìn)行條件篩選,導(dǎo)致代碼比較冗長且效率不高。

總結(jié)了在python中常用的并且使用效率比較高的幾種數(shù)據(jù)篩選函數(shù)如:isin()、query()、contains()、loc()等,并且展示了它們單獨(dú)使用或搭配一起使用的實(shí)踐效果。

2. 篩選方法和函數(shù)簡介

2.1 簡單的篩選方法:單一的篩選:條件范圍可以是數(shù)值或字符串df[df[“column_name”] == value]多字段的篩選(又稱為復(fù)合條件的篩選): 多個(gè)不同的特征列,并且條件可以對應(yīng)不同的數(shù)值或字符串df[(df[“column_name1”] <= value) & (df[“column_name2”] == str)]

2.2 isin函數(shù):df[df[“column_name”].isin(li)] (# li = [20, 25, 27] 或 li = np.arange(20, 30))根據(jù)從isin函數(shù)傳入的列表(li),篩選出與列表中包含的數(shù)值或字符串相同的數(shù)據(jù)記錄, 用法有點(diǎn)類似sql中的"in"

2.3 query函數(shù):df.query("(column_name1 == ‘str1’) & (column_name2 == ‘str2’)")根據(jù)query中引入的不同字段(str1,str2等)和條件,篩選出同時(shí)能滿足這些要求的數(shù)據(jù)記錄

2.4 contains函數(shù):df[df[“column_name”].str.contains(“str”)]篩選出所有含有(str)的數(shù)據(jù)記錄, 用法類似于sql中的"contains"

2.5 loc函數(shù):df.loc[df["column_name] <= value]根據(jù)特征屬性(列名)或索引標(biāo)簽篩選數(shù)據(jù):df.loc[columns 篩選條件] 或df.loc[index 篩選條件];同時(shí)根據(jù)索引標(biāo)簽和特征屬性(列名)篩選數(shù)據(jù):df.loc[index 篩選條件,columns 篩選條件]

2.6 篩選函數(shù)之間還能根據(jù)各自的特點(diǎn)搭配使用

3. 函數(shù)的使用實(shí)踐

3.1 數(shù)據(jù)準(zhǔn)備和說明

數(shù)據(jù)準(zhǔn)備:數(shù)據(jù)按行篩選(數(shù)據(jù)記錄)并提取數(shù)據(jù)

import numpy as np
import pandas as pd
df = pd.DataFrame({"name": ["A001", "A002", "B001", "A001_K", "C002", "B001_K", "B001"], 
                    "protein": [25, 28, 45, 22, 60, 40, 27], 
                    "Qty": [85, 90, 75, 80, 30, 50, 30], 
                    "rank": ["1st", "1st", "1st", "2nd", "1st", "1st", "2nd"]})
df

3.2 示例代碼

3.2.1 簡單的條件篩選方法

# 1 簡單的條件篩選:單一條件篩選
data = df[df["protein"] <= 30]
data

代碼描述:df.loc[df[“protein”] <= 30] 與 df[df[“protein”] <= 30]的運(yùn)行結(jié)果是一樣的。

# 2 多重條件篩選 -- 篩選的條件是數(shù)值
# 篩選并提取protein 在40-50之間的記錄(符合條件)
data = df[(df["protein"] >= 40) & (df["protein"] <= 50)]
data

# 3 多重條件篩選 -- 篩選的條件有數(shù)值和字符串
# 篩選出蛋白質(zhì)含量大于30并且產(chǎn)品評級(jí)為"1st"的數(shù)據(jù)
data = df[(df["protein"] >= 30) & (df["rank"] == "1st")]
data

3.2.2 isin 函數(shù)的使用

返回的結(jié)果是根據(jù)從isin函數(shù)傳入的列表(li),篩選出與列表中包含的數(shù)值或字符串相同的數(shù)據(jù)記錄, 用法有點(diǎn)類似sql中的"in"

# 篩選出與列表中的數(shù)值或字符串相等的數(shù)據(jù)記錄
# li = np.arange(20, 30)
li = [25, 60, 45, 40]
data = df[df["protein"].isin(li)]
data

3.2.3 query 函數(shù)的使用

返回的結(jié)果是根據(jù)query中引入的不同字段(str1,str2)和條件,篩選出同時(shí)能滿足這些要求的數(shù)據(jù)記錄

# 篩選出名稱為“A001”或“B001”,并且級(jí)別都是“1st”的數(shù)據(jù)記錄
data = df.query("(name=='A001'| name=='B001') & (rank == '1st')")
data

溫馨提示:在使用query函數(shù)時(shí),所有的表達(dá)內(nèi)容都必須用引號(hào)標(biāo)識(shí)出來,并且字符串的引號(hào)與表達(dá)式的引號(hào)需要區(qū)分出來(即遵從使用雙引號(hào)與單引號(hào)的套用規(guī)則)。

另外,特征列名稱是不需要使用引號(hào)標(biāo)注的,這可以理解為是直接調(diào)用了列表,因此列名稱不需要注釋。

3.2.4 contains 函數(shù)的使用

# 1 篩選出所有名稱中還有“K”的數(shù)據(jù)記錄
data = df[df["name"].str.contains("K")]
data

# 2 篩選出級(jí)別中含有"st", 并且名字中含有"K"的數(shù)據(jù)記錄
data = df[(df["rank"].str.contains("st") & df["name"].str.contains("K"))]
data

3.2.5 loc 函數(shù)的使用

# 5. loc() 函數(shù) -- 根據(jù)標(biāo)簽和特征列名進(jìn)行數(shù)據(jù)篩選 
# 5.1 單一條件的篩選
data = df.loc[df["protein"] <=30]    # 與df[df["protein"] <=30]的運(yùn)行結(jié)果是一致的!
data

小結(jié):這與之前說的 df[df[“protein”] <=30] 的運(yùn)行結(jié)果是一致的!

# 5.2 復(fù)合條件的篩選
# 篩選出名稱為"B001"并且蛋白質(zhì)含量低于30的數(shù)據(jù)記錄
data = df.loc[(df["name"]=="B001") & (df["protein"]<=30)]
data

# 5.3 使用loc函數(shù)同時(shí)對索引標(biāo)簽和特征屬性(列名)進(jìn)行數(shù)據(jù)篩選
# 注意:當(dāng)使用loc函數(shù)根據(jù)索引標(biāo)簽和特征列名進(jìn)行篩選時(shí),需要設(shè)定相應(yīng)的索引標(biāo)簽。本測試會(huì)先將名稱更換為索引值再進(jìn)行篩選(使用set_index()函數(shù)將特征列名轉(zhuǎn)換為索引值)
# 篩選出名稱為"B001"的所有數(shù)據(jù)記錄
test = df.copy().set_index("name")
test.loc["B001", :]

# 5.4 篩選出名稱為"B001"和“A001”的蛋白質(zhì)和評級(jí)數(shù)據(jù)
test_ = test.loc[["B001", "A001"], ["protein", "rank"]]
test_

3.2.6 篩選函數(shù)的搭配使用

上述介紹的篩選方法和函數(shù)是可以被搭配在一起使用,并且效果很不錯(cuò)!

# 1 篩選出蛋白質(zhì)小于等于30,并且級(jí)別是含有"2nd"的數(shù)據(jù)記錄
data = df[(df["protein"] <=30) & df["rank"].str.contains("2nd")]
data

# 2  篩選出蛋白質(zhì)的含量是列表中的數(shù)值,并且名稱中含有"K"的數(shù)據(jù)記錄
li = [25, 60, 45, 40, 22]
data = df[(df["protein"].isin(li)) & (df["name"].str.contains("K"))]
data

4. 結(jié)束語

  • 單一條件的行或列的篩選可直接使用df[columns 篩選條件] 或df[indx 篩選條件]
  • isin 函數(shù)的使用很靈活,能將多個(gè)不用的數(shù)值范圍要求或字段要求通過列表的形式傳入函數(shù)中進(jìn)行篩選。
  • query 函數(shù)能進(jìn)行多字段的篩選,但要特別注意列名的引用,以及格式的書寫與其他函數(shù)不一樣的地方。
  • contains 函數(shù)其實(shí)是相當(dāng)與SQL 中的contains的用法,能靈活地對字符串的數(shù)據(jù)進(jìn)行篩選。
  • 篩選方法和函數(shù)是可以根據(jù)不同的需要被搭配在一起形成多重的條件篩選,并且使用的效果很不錯(cuò)!
  • 如果是同時(shí)對行和列進(jìn)行篩選,可使用df.loc[index 篩選條件,columns 篩選條件]

基礎(chǔ)概念:loc函數(shù)與iloc函數(shù)的區(qū)別

1.loc() 函數(shù):指Selection by label的函數(shù)

  • 是按照標(biāo)簽來提取數(shù)據(jù),標(biāo)簽是由2個(gè)參數(shù)決定的。
  • 第1個(gè)參數(shù)是index: “0”-“6”; 第2個(gè)參數(shù)是column: “name”, “protein”, “Qty”, “rank” # df.loc[6, :], # df.loc[6, “protein”]

2.iloc(n, m) 函數(shù):指Selection by Position的函數(shù)

  • 是按位置選擇數(shù)據(jù),即第n行,第m列,只接受整數(shù)型 的參數(shù) # df.iloc[:, 0]; #df.iloc[1, :]

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python模型聚合查詢\Q查詢\F查詢\分組查詢操作技巧解析

    Python模型聚合查詢\Q查詢\F查詢\分組查詢操作技巧解析

    這篇文章主要介紹了模型查詢中的一些操作技巧,主要包括模型聚合查詢,Q查詢,F(xiàn)查詢,分組查詢,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • Python下載指定頁面上圖片的方法

    Python下載指定頁面上圖片的方法

    這篇文章主要介紹了Python下載指定頁面上圖片的方法,涉及Python的正則匹配、URL及文件操作相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • Python?statistics模塊示例詳解

    Python?statistics模塊示例詳解

    這篇文章主要介紹了Python?statistics模塊示例詳解,本文總結(jié)了 statistics 模塊的常規(guī)操作,對于數(shù)據(jù)分析還是非常有益處的,需要的朋友可以參考下
    2023-05-05
  • 盤點(diǎn)Python中讀取和提取JSON文件的4種方法

    盤點(diǎn)Python中讀取和提取JSON文件的4種方法

    JSON(JavaScript?Object?Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,Python中提供了多種方式來讀取和處理JSON文件,本文將詳細(xì)介紹四種常見的方法,希望對大家有所幫助
    2024-03-03
  • Python編程根據(jù)字典列表相同鍵的值進(jìn)行合并

    Python編程根據(jù)字典列表相同鍵的值進(jìn)行合并

    這篇文章主要介紹了來學(xué)習(xí)Python字典列表根據(jù)相同鍵的值進(jìn)行合并的操作方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • 圖文詳解梯度下降算法的原理及Python實(shí)現(xiàn)

    圖文詳解梯度下降算法的原理及Python實(shí)現(xiàn)

    梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)。本文將通過圖文詳解梯度下降算法的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • 詳解如何利用Python進(jìn)行客戶分群分析

    詳解如何利用Python進(jìn)行客戶分群分析

    每個(gè)電子商務(wù)數(shù)據(jù)分析師必須掌握的一項(xiàng)數(shù)據(jù)聚類技能,如果你是一名在電子商務(wù)公司工作的數(shù)據(jù)分析師,從客戶數(shù)據(jù)中挖掘潛在價(jià)值,來提高客戶留存率很可能就是你的工作任務(wù)之一。這篇就來告訴你如何將客戶分成不同的群組,并在一段時(shí)間內(nèi)觀察每個(gè)群組的留存率
    2023-02-02
  • python根據(jù)時(shí)間生成mongodb的ObjectId的方法

    python根據(jù)時(shí)間生成mongodb的ObjectId的方法

    這篇文章主要介紹了python根據(jù)時(shí)間生成mongodb的ObjectId的方法,涉及Python操作mongodb數(shù)據(jù)庫的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Python爬蟲學(xué)習(xí)之requests的使用教程

    Python爬蟲學(xué)習(xí)之requests的使用教程

    requests庫是一個(gè)常用的用于?http?請求的模塊,它使用?python?語言編寫,可以方便的對網(wǎng)頁進(jìn)行爬取。本文將通過示例詳細(xì)講講requests庫的使用,需要的可以參考一下
    2022-08-08
  • python PIL模塊的基本使用

    python PIL模塊的基本使用

    這篇文章主要介紹了python PIL模塊的基本使用,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09

最新評論