欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python pandas dataframe多列篩選方式

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

python pandas dataframe多列篩選

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

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

1. 背景概述

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

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

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

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

2.1 簡單的篩選方法:單一的篩選:條件范圍可以是數(shù)值或字符串df[df[“column_name”] == value]多字段的篩選(又稱為復合條件的篩選): 多個不同的特征列,并且條件可以對應不同的數(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ù)記錄, 用法有點類似sql中的"in"

2.3 query函數(shù):df.query("(column_name1 == ‘str1’) & (column_name2 == ‘str2’)")根據(jù)query中引入的不同字段(str1,str2等)和條件,篩選出同時能滿足這些要求的數(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ù)特征屬性(列名)或索引標簽篩選數(shù)據(jù):df.loc[columns 篩選條件] 或df.loc[index 篩選條件];同時根據(jù)索引標簽和特征屬性(列名)篩選數(shù)據(jù):df.loc[index 篩選條件,columns 篩選條件]

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

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

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

數(shù)據(jù)準備:數(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]的運行結(jié)果是一樣的。

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

# 3 多重條件篩選 -- 篩選的條件有數(shù)值和字符串
# 篩選出蛋白質(zhì)含量大于30并且產(chǎn)品評級為"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ù)記錄, 用法有點類似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ù)據(jù)記錄

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

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

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

3.2.4 contains 函數(shù)的使用

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

# 2 篩選出級別中含有"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ù)標簽和特征列名進行數(shù)據(jù)篩選 
# 5.1 單一條件的篩選
data = df.loc[df["protein"] <=30]    # 與df[df["protein"] <=30]的運行結(jié)果是一致的!
data

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

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

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

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

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

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

# 1 篩選出蛋白質(zhì)小于等于30,并且級別是含有"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ù)的使用很靈活,能將多個不用的數(shù)值范圍要求或字段要求通過列表的形式傳入函數(shù)中進行篩選。
  • query 函數(shù)能進行多字段的篩選,但要特別注意列名的引用,以及格式的書寫與其他函數(shù)不一樣的地方。
  • contains 函數(shù)其實是相當與SQL 中的contains的用法,能靈活地對字符串的數(shù)據(jù)進行篩選。
  • 篩選方法和函數(shù)是可以根據(jù)不同的需要被搭配在一起形成多重的條件篩選,并且使用的效果很不錯!
  • 如果是同時對行和列進行篩選,可使用df.loc[index 篩選條件,columns 篩選條件]

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

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

  • 是按照標簽來提取數(shù)據(jù),標簽是由2個參數(shù)決定的。
  • 第1個參數(shù)是index: “0”-“6”; 第2個參數(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é)

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

相關文章

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

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

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

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

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

    Python?statistics模塊示例詳解

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

    盤點Python中讀取和提取JSON文件的4種方法

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

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

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

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

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

    詳解如何利用Python進行客戶分群分析

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

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

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

    Python爬蟲學習之requests的使用教程

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

    python PIL模塊的基本使用

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

最新評論