如何在Polars DataFrame中将特定值替换为null?
在Polars DataFrame中将特定哨兵值替换为Null的方法
当然可以,Polars提供了多种灵活的方式将哨兵值(比如"_UNKNOWN")替换为真实的缺失值(null),以下是几种常用方案:
1. 单个列替换
针对某一列的特定哨兵值,直接使用replace方法将其映射为None(Polars会自动转换为对应数据类型的null):
import polars as pl # 示例DataFrame df = pl.DataFrame({ "col1": ["a", "_UNKNOWN", "b", "_UNKNOWN"], "col2": [1, 999, 2, 999] }) # 替换col1中的"_UNKNOWN"为null df = df.with_columns( pl.col("col1").replace("_UNKNOWN", None) )
2. 多列批量替换
如果多个列需要替换同一个哨兵值,可以通过列选择器批量处理:
# 替换指定列列表中的"_UNKNOWN" df = df.with_columns( pl.col(["col1", "col3"]).replace("_UNKNOWN", None) ) # 替换所有字符串类型列中的"_UNKNOWN" df = df.with_columns( pl.col(pl.Utf8).replace("_UNKNOWN", None) )
3. 不同列对应不同哨兵值
若不同列的哨兵值不同,使用when/then表达式精准处理:
df = df.with_columns( # col1替换"_UNKNOWN" pl.col("col1").when(pl.col("col1") == "_UNKNOWN").then(None).keep_name(), # col2替换999 pl.col("col2").when(pl.col("col2") == 999).then(None).keep_name() )
4. 全表替换指定值
如果整个DataFrame中所有出现的某个值都需要替换为null,直接调用DataFrame级别的replace方法:
# 全表替换"_UNKNOWN"为null df = df.replace("_UNKNOWN", None)
替换完成后,可以用df.null_count()查看各列的缺失值数量,验证替换效果。
内容的提问来源于stack exchange,提问作者user554319
相关产品推荐
相关产品推荐

