当前位置: 首页 > news >正文

【Pandas】pandas DataFrame where

Pandas2.2 DataFrame

Indexing, iteration

方法描述
DataFrame.head([n])用于返回 DataFrame 的前几行
DataFrame.at快速访问和修改 DataFrame 中单个值的方法
DataFrame.iat快速访问和修改 DataFrame 中单个值的方法
DataFrame.loc用于基于标签(行标签和列标签)来访问和修改 DataFrame 中的数据
DataFrame.iloc用于基于整数位置(行号和列号)来访问和修改 DataFrame 中的数据
DataFrame.insert(loc, column, value[, …])用于在 DataFrame 的指定位置插入一个新的列
DataFrame.iter()用于迭代 DataFrame 的列名
DataFrame.items()用于迭代 DataFrame 的列名和列数据
DataFrame.keys()返回 DataFrame 的列名
DataFrame.iterrows()用于逐行迭代 DataFrame
DataFrame.itertuples([index, name])用于逐行迭代 DataFrame
DataFrame.pop(item)用于从 DataFrame 中删除指定列
DataFrame.tail([n])用于返回 DataFrame 的最后 n
DataFrame.xs(key[, axis, level, drop_level])用于从 DataFrame 中提取一个横截面(cross-section)
DataFrame.get(key[, default])用于从 DataFrame 中获取指定列的数据
DataFrame.isin(values)用于检查 DataFrame 中的每个元素是否包含在指定的值集合中
DataFrame.where(cond[, other, inplace, …])用于根据条件筛选 DataFrame 中的元素

pandas.DataFrame.where()

pandas.DataFrame.where(cond, other=nan, *, inplace=False, axis=None, level=None) 方法用于根据条件筛选 DataFrame 中的元素。如果条件为 True,则保留元素;如果条件为 False,则用 other 参数指定的值替换该元素。

参数
  • cond:布尔条件,可以是布尔值、布尔数组、布尔 DataFrame 或布尔 Series。
  • other:可选参数,当条件为 False 时使用的值。默认为 NaN
  • inplace:布尔值,如果为 True,则直接在原 DataFrame 上进行修改,否则返回一个新的 DataFrame。默认为 False
  • axis:指定轴,0'index' 表示按行,1'columns' 表示按列。默认为 None
  • level:如果索引是多级索引,指定要使用的级别。默认为 None
返回值
  • 如果 inplace=False,返回一个新的 DataFrame。
  • 如果 inplace=True,返回 None
示例

假设我们有一个 DataFrame 如下:

import pandas as pd
import numpy as npdata = {'A': [1, 2, 3, 4],'B': [5, 6, 7, 8]
}df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)

输出:

原始 DataFrame:A  B
0  1  5
1  2  6
2  3  7
3  4  8
示例 1:使用布尔条件替换值

A 列中大于 2 的值替换为 NaN

result = df.where(df['A'] <= 2)
print("\n将 A 列中大于 2 的值替换为 NaN:")
print(result)

输出:

将 A 列中大于 2 的值替换为 NaN:A    B
0  1.0  5.0
1  2.0  6.0
2  NaN  NaN
3  NaN  NaN
示例 2:使用布尔条件和自定义替换值

A 列中大于 2 的值替换为 0

result = df.where(df['A'] <= 2, other=0)
print("\n将 A 列中大于 2 的值替换为 0:")
print(result)

输出:

将 A 列中大于 2 的值替换为 0:A  B
0  1  5
1  2  6
2  0  0
3  0  0
示例 3:使用布尔 DataFrame 替换值

A 列中大于 2 的值替换为 NaNB 列中大于 6 的值替换为 NaN

cond = (df['A'] <= 2) & (df['B'] <= 6)
result = df.where(cond)
print("\n将 A 列中大于 2 的值和 B 列中大于 6 的值替换为 NaN:")
print(result)

输出:

将 A 列中大于 2 的值和 B 列中大于 6 的值替换为 NaN:A    B
0  1.0  5.0
1  2.0  6.0
2  NaN  NaN
3  NaN  NaN
示例 4:使用 inplace=True 直接修改原 DataFrame

A 列中大于 2 的值替换为 0,直接修改原 DataFrame:

df.where(df['A'] <= 2, other=0, inplace=True)
print("\n直接修改原 DataFrame:")
print(df)

输出:

直接修改原 DataFrame:A  B
0  1  5
1  2  6
2  0  0
3  0  0
示例 5:使用多级索引

假设我们有一个多级索引的 DataFrame:

index = pd.MultiIndex.from_tuples([('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y')], names=['first', 'second'])
df = pd.DataFrame(data, index=index)
print("原始 DataFrame:")
print(df)

输出:

原始 DataFrame:A  B
first second       
a     x       1  5y       2  6
b     x       0  0y       0  0

使用 where 方法并指定 level 参数:

result = df.where(df['A'] <= 2, level='first')
print("\n使用 where 方法并指定 level 参数:")
print(result)

输出:

使用 where 方法并指定 level 参数:A    B
first second       
a     x    1.0  5.0y    2.0  6.0
b     x    NaN  NaNy    NaN  NaN
总结

pandas.DataFrame.where 方法提供了一种灵活的方式来根据条件筛选和替换 DataFrame 中的元素。你可以使用布尔条件、布尔数组或布尔 DataFrame 来指定哪些元素需要保留,哪些需要替换。通过 other 参数可以指定替换的值,默认为 NaNinplace 参数允许你选择是否直接修改原 DataFrame。这对于数据清洗和预处理非常有用。

相关文章:

  • 基于微信小程序的中医小妙招系统的设计与实现
  • python抓取HTML页面数据+可视化数据分析(投资者数量趋势)
  • Function Calling的机制 (含示例)
  • SpringAI 学习笔记
  • 斐波那契数列计算:数据结构与算法视角
  • 【MySQL】初识数据库
  • HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南
  • TypeScript 从入门到精通:完整教程与实战应用(一)
  • git 出现 port 443 Connection timed out
  • AIGC产品如何平衡用户体验与内容安全?
  • 通过 Zotero 的样式编辑器(Style Editor)自定义文献引用和参考文献列表的格式
  • pdfjs库使用记录1
  • 2026《数据结构》考研复习笔记三(C++高级教程)
  • 【“星瑞” O6 评测】—NPU 部署 face parser 模型
  • Windows .NET Core 应用程序部署到 IIS 解决首次访问加载慢的问题
  • 基于DeepSeek的考研暑假日志分析
  • Transformer 架构 - 解码器 (Transformer Architecture - Decoder)
  • 【前端HTML生成二维码——MQ】
  • Web3区块链网络中数据隐私安全性探讨
  • 重构未来智能:Anthropic 解码Agent设计哲学三重奏
  • 北大学者:过度依赖技术工具可能会削弱人类主动思考的能力
  • 国际乒联祝贺王励勤当选中国乒协主席并向刘国梁致谢
  • 上影新片《密档》杀青,全新角度演绎石库门秘战
  • 北京地铁5号线仗义执言女乘客发文:同理心无比重要,希望就此平息
  • 禾赛:车载激光雷达走向标配,核心能力可在机器人领域复用
  • 西湖大学本科新增临床医学专业,今年本科招生专业增至8个