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

如何按条件替换pandas DataFrame指定列的单元格值

Pandas按条件替换列值实现方案

问题场景

给定如下测试DataFrame:

import pandas as pd
df = pd.DataFrame({
    'Text': ['aa bb cc', 'ee ff gg hh', 'xx yy', 'zz zz zz'],
    'Name': ['Paul', 'NA', 'NA', 'Anton']
})

初始DataFrame打印效果:

Text        Name
0  aa bb cc    Paul
1  ee ff gg hh NA
2  xx yy       NA
3  zz zz zz    Anton

需求规则:

  • 仅替换Name列中值为字符串"NA"的单元格
  • 替换值为对应行Text列内容的前3个词汇,若Text列词汇总数不足3个则取全部词汇

期望输出效果:

Text        Name
0  aa bb cc    Paul
1  ee ff gg hh ee ff gg
2  xx yy       xx yy
3  zz zz zz    Anton

原有写法问题

你之前使用的列表推导式存在两个核心错误:

  1. 推导式里的if判断是对整个DataFrame做布尔筛选,没有做逐行的位置匹配,判断逻辑不生效
  2. 推导式最终只会生成Name为NA的行对应的结果,列表长度和原DataFrame行数不匹配,无法直接赋值覆盖原列

正确代码

使用pandas原生的布尔索引+向量化apply实现,运行效率更高,逻辑更清晰:

# 标记Name列为NA的行
na_mask = df['Name'] == 'NA'
# 仅对标记的行做替换,提取对应Text列的前3个词拼接
df.loc[na_mask, 'Name'] = df.loc[na_mask, 'Text'].apply(lambda text: ' '.join(text.split()[:3]))

运行后打印df即可得到和期望完全一致的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:09:22