You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于列名将指定文本列的非空值替换为NaN

解决方案:基于列名匹配特定文本,替换对应列非空值为NaN

核心思路

通过列名字符串匹配筛选目标列,再利用pandas的条件替换方法将列内非空值批量设为NaN。

示例代码

1. 构造示例数据(匹配参考图片结构)

import pandas as pd
import numpy as np

data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Maths_Marks': [85, 90, np.nan],
    'Maths_Grade': ['A', 'A+', 'B'],
    'Science_Marks': [78, np.nan, 82],
    'Science_Grade': ['B', 'A', 'A']
}
df = pd.DataFrame(data)

2. 批量替换逻辑

假设需要处理**列名包含"Maths"**的所有列:

# 筛选目标列:列名包含指定文本
target_columns = df.columns[df.columns.str.contains('Maths')]

# 将目标列的非空值替换为NaN
df[target_columns] = df[target_columns].mask(df[target_columns].notna())

代码解释

  • df.columns.str.contains('Maths'):生成布尔数组,标记列名是否包含指定文本,用于快速筛选目标列
  • mask(df[target_columns].notna()):mask方法会将满足条件(非空)的元素直接替换为NaN,精准实现需求;也可以用where(df[target_columns].isna(), np.nan),效果完全一致

扩展用法

  • 忽略大小写匹配:添加case=False参数,兼容不同大小写的列名
    target_columns = df.columns[df.columns.str.contains('maths', case=False)]
    
  • 多文本匹配(支持正则):一次性匹配包含"Maths"或"Science"的列
    target_columns = df.columns[df.columns.str.contains('Maths|Science')]
    

效果对比

处理前:

NameMaths_MarksMaths_GradeScience_MarksScience_Grade
Alice85.0A78.0B
Bob90.0A+NaNA
CharlieNaNB82.0A

处理后:

NameMaths_MarksMaths_GradeScience_MarksScience_Grade
AliceNaNNaN78.0B
BobNaNNaNNaNA
CharlieNaNNaN82.0A

内容的提问来源于stack exchange,提问作者Vignesh Vangala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:10:25