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

基于文本列字符串条件填充数值列空值的实现及报错处理

报错原因

df['TextColumn'].str.contains(string)返回的是长度和数据表行数一致的布尔值Series,而Python的if判断要求输入单个布尔值,系统无法直接判定一整列的布尔结果整体为真或假,因此抛出真值歧义错误。

实现方案

通过布尔索引筛选出文本列模糊匹配目标字符串的行,仅对这部分行的数值列空值执行填充操作,不会影响其他行的数值:

def fill_nulls(df, string, val):
    # 构造匹配掩码,na=False表示文本列本身为空的行默认不匹配
    match_mask = df['TextColumn'].str.contains(string, na=False)
    # 仅对匹配行的数值列空值填充
    df.loc[match_mask, 'NumericColumn'] = df.loc[match_mask, 'NumericColumn'].fillna(val)
    return df
使用示例
import pandas as pd
import numpy as np

# 构造测试数据
df = pd.DataFrame({
    'TextColumn': ['苹果手机', '华为平板', '苹果电脑', '小米手机', '苹果耳机'],
    'NumericColumn': [5999, np.nan, np.nan, 3999, np.nan]
})

# 填充所有文本包含「苹果」的行的数值列空值为6999
df = fill_nulls(df, '苹果', 6999)
print(df)

运行后输出结果:

TextColumnNumericColumn
0苹果手机5999
1华为平板nan
2苹果电脑6999
3小米手机3999
4苹果耳机6999
扩展说明
  • 若需要区分大小写匹配,可在str.contains中添加参数case=True,默认不区分大小写
  • 若需要关闭正则匹配、仅按普通字符串匹配,可在str.contains中添加参数regex=False
  • 函数将数据表作为参数传入、处理后返回,避免了操作全局变量的风险,适配多数据表处理场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:00