網站首頁 編程語言 正文
使用Pandas從多個條件(AND,OR,NOT)中提取行的方法。
有以下2點需要注意:
- &,|,?的使用(and、or、not的錯誤)
- 使用比較運算符時,請將每個條件括在括號中。
以下數據為例。
import pandas as pd
df = pd.read_csv('./data/09/sample_pandas_normal.csv')
print(df)
# ? ? ? name ?age state ?point
# 0 ? ?Alice ? 24 ? ?NY ? ? 64
# 1 ? ? ?Bob ? 42 ? ?CA ? ? 92
# 2 ?Charlie ? 18 ? ?CA ? ? 70
# 3 ? ? Dave ? 68 ? ?TX ? ? 70
# 4 ? ?Ellen ? 24 ? ?CA ? ? 88
# 5 ? ?Frank ? 30 ? ?NY ? ? 57
本例是使用pandas.DataFrame,但pandas.Series也同樣適用。
如何提取(選擇)行
首先,展示如何從pandas.DataFrame中提取(選擇)行以獲得新的pandas.DataFrame。
使用布爾列表(數組)或pandas.Series,只能提取(選擇)True行。
mask = [True, False, True, False, True, False]
df_mask = df[mask]
print(df_mask)
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
通過AND,OR,NOT多個條件提取(選擇)行的代碼-示例
具有兩個條件值的pandas.Series,可以使用&獲得如下結果。在這里,為了便于說明,將==和?用作二個條件,但是僅使用!=也是可以。
print(df['age'] < 35)
# 0 ? ? True
# 1 ? ?False
# 2 ? ? True
# 3 ? ?False
# 4 ? ? True
# 5 ? ? True
# Name: age, dtype: bool
print(~(df['state'] == 'NY'))
# 0 ? ?False
# 1 ? ? True
# 2 ? ? True
# 3 ? ? True
# 4 ? ? True
# 5 ? ?False
# Name: state, dtype: bool
print((df['age'] < 35) & ~(df['state'] == 'NY'))
# 0 ? ?False
# 1 ? ?False
# 2 ? ? True
# 3 ? ?False
# 4 ? ? True
# 5 ? ?False
# dtype: bool
僅提取(選擇)True行。
df_and = df[(df['age'] < 35) & ~(df['state'] == 'NY')]
print(df_and)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
對于OR也是如此。使用|。
print((df['age'] < 20) | (df['point'] > 90))
# 0 ? ?False
# 1 ? ? True
# 2 ? ? True
# 3 ? ?False
# 4 ? ?False
# 5 ? ?False
# dtype: bool
df_or = df[(df['age'] < 20) | (df['point'] > 90)]
print(df_or)
# ? ? ? name ?age state ?point
# 1 ? ? ?Bob ? 42 ? ?CA ? ? 92
# 2 ?Charlie ? 18 ? ?CA ? ? 70
3個以上條件的運算符的優先級
運算符的優先級是NOT(?),AND(&),OR(|)。因此,結果因順序而異。
df_multi_1 = df[(df['age'] < 35) | ~(df['state'] == 'NY') & (df['point'] < 75)]
print(df_multi_1)
# ? ? ? name ?age state ?point
# 0 ? ?Alice ? 24 ? ?NY ? ? 64
# 2 ?Charlie ? 18 ? ?CA ? ? 70
# 3 ? ? Dave ? 68 ? ?TX ? ? 70
# 4 ? ?Ellen ? 24 ? ?CA ? ? 88
# 5 ? ?Frank ? 30 ? ?NY ? ? 57
df_multi_2 = df[(df['age'] < 35) & (df['point'] < 75) | ~(df['state'] == 'NY')]
print(df_multi_2)
# ? ? ? name ?age state ?point
# 0 ? ?Alice ? 24 ? ?NY ? ? 64
# 1 ? ? ?Bob ? 42 ? ?CA ? ? 92
# 2 ?Charlie ? 18 ? ?CA ? ? 70
# 3 ? ? Dave ? 68 ? ?TX ? ? 70
# 4 ? ?Ellen ? 24 ? ?CA ? ? 88
# 5 ? ?Frank ? 30 ? ?NY ? ? 57
將每個組括在括號中比較安全。
df_multi_3 = df[((df['age'] < 35) | ~(df['state'] == 'NY')) & (df['point'] < 75)]
print(df_multi_3)
# name age state point
# 0 Alice 24 NY 64
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 5 Frank 30 NY 57
原文鏈接:https://blog.csdn.net/qq_18351157/article/details/105403779
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-05-25 Springboot使用Redis-Cell實現限流
- 2024-01-16 Oracle的取整函數
- 2023-05-24 golang?recover函數使用中的一些坑解析_Golang
- 2022-08-16 Kotlin實用語法糖空安全類型轉換及相等性判斷_Android
- 2022-08-04 十分鐘教會你用Python處理CSV文件_python
- 2023-11-21 高階函數HoF:用filter()方法編寫一個素數生成函數primes()
- 2022-04-14 Python之OptionParser模塊使用詳解_python
- 2022-06-08 兩步配置解決 IDEA新項目maven依賴問題
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支