新闻中心
Polars中基于条件替换NaN值:从另一列获取值的教程

本文详细介绍了在polars数据框中如何根据某一列的nan(或null)值,使用同一数据框中另一列的值来替换目标列中的数据。通过对比pandas的实现方式,深入讲解了polars中`pl.when().then().otherwise()`表达式的用法,提供了清晰的示例代码和解释,帮助用户高效地进行条件数据替换。
在数据处理和清洗过程中,根据特定条件替换数据框(DataFrame)中的值是一项常见任务。特别是当需要处理缺失值(NaN或null)时,我们可能希望用数据框中其他列的有效数据来填充这些缺失值。本教程将重点介绍如何在Polars这一高性能数据处理库中实现这一功能,并与Pandas的实现方式进行对比,以便于用户更好地理解和迁移。
场景描述
假设我们有一个数据框,其中包含三列:col_x、col_y和col_z。我们的目标是:如果col_x中的值为NaN(或null),则将对应行col_y的值替换为col_z中的值;如果col_x不为NaN,则保持col_y的原有值不变。
Pandas实现方式回顾
在Pandas中,实现这种条件替换通常有多种方法,其中一种常见且直观的方式是使用df.loc结合布尔索引,或者使用np.where:
import pandas as pd
import numpy as np
# 示例数据
data = {
'col_x': [1.0, np.nan, 3.0, np.nan, 5.0],
'col_y': [10, 20, 30, 40, 50],
'col_z': [100, 200, 300, 400, 500]
}
df_pandas = pd.DataFrame(data)
print("原始 Pandas DataFrame:")
print(df_pandas)
# 使用 df.loc 进行条件替换
# df_pandas.loc[df_pandas['col_x'].isna(), 'col_y'] = df_pandas['col_z']
# 更简洁的 np.where 方法
df_pandas["col_y"] = np.where(pd.isnull(df_pandas['col_x']), df_pandas['col_z'], df_pandas['col_y'])
print("\n替换后的 Pandas DataFrame:")
print(df_pandas)上述Pandas代码中,np.where函数会根据第一个条件(pd.isnull(df_pandas['col_x']))判断,如果为真,则取第二个参数的值(df_pandas['col_z']),否则取第三个参数的值(df_pandas['col_y'])。
Musho
AI网页设计Figma插件
76
查看详情
Polars实现方式
Polars作为一个高性能的DataFrame库,其操作通常基于表达式(expressions)进行,这使得代码更具声明性且执行效率更高。实现上述条件替换的核心是使用pl.when().then().otherwise()结构。
import polars as pl
# 示例数据
data = {
'col_x': [1.0, None, 3.0, None, 5.0], # Polars中通常使用None表示null,但浮点列的NaN也可用.is_nan()检测
'col_y': [10, 20, 30, 40, 50],
'col_z': [100, 200, 300, 400, 500]
}
df_polars = pl.DataFrame(data)
print("原始 Polars DataFrame:")
print(df_polars)
# 使用 pl.when().then().otherwise() 进行条件替换
df_polars = (
df_polars
.with_columns(
pl.when(pl.col('col_x').is_null()) # 判断 col_x 是否为 null (对于浮点数NaN也适用)
.then(pl.col('col_z')) # 如果为 null,则取 col_z 的值
.otherwise(pl.col('col_y')) # 否则,保持 col_y 的原有值
.alias('col_y') # 将结果重命名回 col_y
)
)
print("\n替换后的 Polars DataFrame:")
print(df_polars)代码解析
- df_polars.with_columns(...): 在Polars中,对DataFrame进行列操作通常通过with_columns()方法完成。这个方法会返回一个新的DataFrame,其中包含了修改或新增的列。
-
pl.when(pl.col('col_x').is_null()): 这是条件表达式的开始。
- pl.col('col_x'):选择名为col_x的列。
- .is_null():这是一个表达式方法,用于检查列中的每个元素是否为null。对于浮点数类型,它也能正确识别NaN值。如果列中可能只有NaN而没有None,也可以使用.is_nan()。
- .then(pl.col('col_z')): 如果when中的条件为真(即col_x为null),则表达式的结果将是col_z列对应行的值。
- .otherwise(pl.col('col_y')): 如果when中的条件为假(即col_x不为null),则表达式的结果将是col_y列对应行的原有值。这一步至关重要,它确保了只有满足条件的行才会被替换,其他行保持不变。
-
.alias('col_y'): 最后,使用.alias('col_y')将这个新生成的列重命名为col_y。由于with_columns会替换同
名列,这样就实现了对col_y的“原地”更新。
注意事项与最佳实践
- Null与NaN: 在Polars中,is_null()方法通常能够处理各种类型的缺失值,包括整数列的None、字符串列的None以及浮点数列的NaN。如果仅需针对浮点数类型的NaN进行判断,可以使用is_nan()。
- 表达式驱动: Polars的操作是基于表达式的,这意味着你构建的是一个操作的“计划”,而不是立即执行。这使得Polars能够进行优化,从而提供出色的性能。
- 链式操作: Polars鼓励使用链式操作(method chaining),使代码更易读、更流畅。
- 不可变性: Polars的许多操作(如with_columns)都返回一个新的DataFrame,而不是修改原始DataFrame。这与Pandas中的某些原地修改操作有所不同,但有助于避免副作用和提高代码的预测性。
总结
通过pl.when().then().otherwise()表达式,Polars提供了一种强大而灵活的方式来处理基于条件的列值替换。这种模式不仅适用于替换缺失值,还可以用于实现各种复杂的条件逻辑。掌握这一结构是高效使用Polars进行数据清洗和转换的关键。与Pandas的np.where或df.loc相比,Polars的表达式方式在处理大规模数据时通常能展现出更好的性能。
以上就是Polars中基于条件替换NaN值:从另一列获取值的教程的详细内容,更多请关注其它相关文章!
# 浮点数
# seo video tube
# 查淘宝关键词排名的网站
# 百度关键词搜索排名优化
# 民生网络营销推广
# 华蓥汽车改灯关键词排名
# 广州网络推广seo怎么收费
# 抖店营销推广属于哪个类目
# SEO云优化营商
# 许昌搜索seo优化
# seo找国外公司
# ai
# 不为
# 可以使用
# 数据处理
# 将是
# 浮点
# 框中
# 如何用
# 链式
# 这一
# 数据清洗
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Python实时数据流中的动态最值查找策略
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
Python多线程中正确使用sigwait处理SIGALRM信号
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比
Discord Slash 命令响应超时问题的异步解决方案
谷歌google账号怎么注册账号 谷歌账号注册官方流程
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
Python中高效访问嵌套字典与列表中的键值对
C++如何比较两个字符串_C++ string compare函数与操作符对比
字由网在线版登录地址 字由网网页版安全入口
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
使用Python高效删除Word宏并转换DOCM为DOCX格式
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
Pygame教程:解决用户输入与游戏状态更新不同步问题
J*a应用程序首次运行自动创建文件与目录的最佳实践
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
限制HTML日期输入框的日期选择范围
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
Promise错误处理:在catch后终止链式then执行的策略
支付宝如何管理隐私设置_支付宝隐私保护的配置技巧
在React函数组件中利用原生HTML5进行邮箱地址验证
PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
在Runstone环境中高效处理TasteDive API的JSON数据
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
如何将HTML表格多行数据保存到Google Sheets
mysql备份恢复性能优化_mysql备份恢复性能优化方法
2026春节假期时间安排 2026春节假日查询
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
Python Socket多播通信中指定源IP地址的实践指南
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
海棠电脑版入口_通过电脑访问海棠官网阅读
Lar*el 递归关系中排除指定分支的教程
不同用户不同价格! 索尼开启账户个性化定价测试
深入理解J*a合成构造器:何时以及为何阻止其生成
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
学习通在线学习平台 学习通网页版直接进入课程中心
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情


2025-11-02
浏览次数:次
返回列表
名列,这样就实现了对col_y的“原地”更新。