pandas條件替換值(where&mask)

来源:https://www.cnblogs.com/itelephant/archive/2023/02/23/17147902.html
-Advertisement-
Play Games

pandas條件替換值(where&mask) 在日常分析中,經常會遇到對數據的篩選處理相關的工作,我們可以使用loc和iloc定位分析篩選的列或行數據,下麵介紹一種高級篩選的用法where和mask。 pd.where: 替換條件(condition)為Flase處的值 pd.mask: 替換條件 ...


pandas條件替換值(where&mask)

在日常分析中,經常會遇到對數據的篩選處理相關的工作,我們可以使用lociloc定位分析篩選的列或行數據,下麵介紹一種高級篩選的用法wheremask

pd.where: 替換條件(condition)為Flase處的值

pd.mask: 替換條件(condition)為True處的值

np.where: 替換條件,類似三元表達式

# 條件不成立時,值替換成other
pd.where(self, cond, other=nan, inplace=False,
        axis=None, level=None, errors='raise', try_cast=False)
# 條件成立時,值替換成other
pd.mask(self, cond, other=nan, inplace=False,
		axis=None, level=None, errors='raise', try_cast=False)
# 條件成立時,值為x;不成立時,值為y
np.where(condition, x, y)

首先模擬一組學生成績表數據:

import pandas as pd
import numpy as np

# 設置學科
subjects = ['math', 'chinese', 'english', 'history']

# 設置學生
students = ['Tom', 'Alice', 'Bobby', 'Candy', 'David', 'Eva', 'Frank', 'Grace', 'Howard', 'Ivy',
            'John', 'Karen', 'Larry', 'Marie', 'Nancy', 'Oscar', 'Peter', 'Queen', 'Robert', 'Susan']

# 隨機生成成績
score = np.random.randint(low=0, high=100, size=(len(students), len(subjects)))

# 生成DataFrame
df = pd.DataFrame(
    score,
    columns=subjects,
    index=students
)
df
math chinese english history
Tom 24 57 60 44
Alice 92 25 64 26
Bobby 96 61 94 96
Candy 36 87 10 38
David 29 73 37 64
Eva 94 40 30 81
Frank 24 44 40 14
Grace 37 70 50 5
Howard 82 86 46 10
Ivy 24 7 30 30
John 39 32 97 48
Karen 68 29 34 11
Larry 82 5 3 78
Marie 96 83 73 63
Nancy 25 33 37 53
Oscar 2 65 49 73
Peter 9 19 11 67
Queen 44 19 85 23
Robert 75 35 47 77
Susan 71 6 10 82

1 pd.where

  • where(條件, pd.NA)

值替換:pandas中的where方法,如果 條件 為真,保持原來的值,否則替換為other

增加欄位 math_pass, 數學成績大於60,為及格, 否則為不及格

df1 = df.copy()
# 預設及格
df1['math_pass'] = '及格'
df1['math_pass'] = df1['math_pass'].where(df1['math'] > 60, '不及格')
df1
math chinese english history math_pass
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

2 np.where

numpy中的where使用,與pandas有所不同

# 條件成立時,值為x;不成立時,值為y
np.where(condition, x, y)

增加欄位 math_pass2, 數學成績大於60,為及格, 否則為不及格

df2 = df.copy()
# 數學成績大於60,為及格, 否則為不及格
df2['math_pass2'] = np.where(df2['math'] > 60, '及格', '不及格')
df2
math chinese english history math_pass2
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

3 pd.mask

值替換:pandas中的mask方法,如果 條件 為真,值替換為other

增加欄位 math_pass3, 數學成績大於60,為及格, 否則為不及格

df3 = df.copy()
df3['math_pass3'] = '不及格'
df3['math_pass3'] = df3['math_pass3'].mask(df3['math'] > 60, '及格')
df3
math chinese english history math_pass3
Tom 24 57 60 44 不及格
Alice 92 25 64 26 及格
Bobby 96 61 94 96 及格
Candy 36 87 10 38 不及格
David 29 73 37 64 不及格
Eva 94 40 30 81 及格
Frank 24 44 40 14 不及格
Grace 37 70 50 5 不及格
Howard 82 86 46 10 及格
Ivy 24 7 30 30 不及格
John 39 32 97 48 不及格
Karen 68 29 34 11 及格
Larry 82 5 3 78 及格
Marie 96 83 73 63 及格
Nancy 25 33 37 53 不及格
Oscar 2 65 49 73 不及格
Peter 9 19 11 67 不及格
Queen 44 19 85 23 不及格
Robert 75 35 47 77 及格
Susan 71 6 10 82 及格

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 監聽的文件變化的方式有很多,但是比較完美的還是jNotify https://jnotify.sourceforge.net/ 對比一下監控方式的優缺點 | 方式 | 缺點 | | | | |java原生watch | 可能對文件時間獲取有缺毫秒的問題 | |commons-io | 沒有文件重命名 ...
  • Java基礎語法:運算符、包機制、JavaDoc 自增、自減、一元運算符:++、-- 例子:b = a++; -->先給b賦值,a再自增:b=a; a=a+1; b = ++a; -->a先自增,再給b賦值:a=a+1; b=a; 初識Math類 冪運算:Math.pow(a, b):其中a與b都是 ...
  • 教程簡介 適用於初學者的Apache HttpClient教程 - 從基本到高級概念的簡單簡單步驟學習Apache HttpClient,其中包括概述,環境設置,Http獲取請求,Http Post請求,響應處理程式,關閉連接,中止請求,攔截器,用戶身份驗證等示例,使用代理,代理身份驗證,基於表單的 ...
  • C語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入C語言代碼,點擊運行,可線上編譯運行C語言,C語言代碼線上運行調試,C語言線上編譯,可快速線上測試您的C語言代碼,線上編譯C語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提供,線上工具後端由眾多Doc ...
  • 不知道各位老色批們平常看視頻都是在哪裡看的,有人說某魚舞蹈區,有人說某牙舞蹈區,要我說都不如西瓜shipin,這裡面個個都是人才,說話又好聽,超喜歡這裡的… 好了話不多說,我們直接開始本次的內容。 模塊安裝 本次需要使用的模塊是requests 模塊,沒安裝的小伙伴直接pip安裝即可。 環境 本次使 ...
  • 現在市面上有很多免費的FTP軟體:如FileZilla ,那如果想自己在代碼中實現與ftp伺服器的上傳下載文件該如何實現那? 本質上ftp協議就是TCP基礎上建立的一種協議,具體如下。 FTP 概述 文件傳輸協議(FTP)作為網路共用文件的傳輸協議,在網路應用軟體中具有廣泛的應用。FTP的目標是提高 ...
  • 一.正常加鎖 當兩個用戶同時註冊一個用戶名時,為保證用戶名不能重覆,因此對其註冊的用戶名加鎖。 具體步驟: 獲得用戶註冊的用戶名,進行判斷,如果為空則對其進行加鎖,保存到資料庫,釋放鎖資源。 二.線程出現阻塞 當A線程加鎖後出現阻塞時,導致數據還沒有存到資料庫,鎖的時間便會失效。 B線程便會執行,對 ...
  • 睏倦的時候寫了個個獲取本地時間,列印總比當前時間大8小時,找了很久原因 package main import ( "fmt" "time" ) func main() { now := time.Now() fmt.Println(now) fmt.Println("nowStr:", now.F ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...