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

自定义函数应用于Pandas DataFrame列不生效,如何排查解决?

问题定位与修复方案

核心错误(无修改效果的直接原因)

你的自定义函数逻辑中,已经生成了处理完成的words_tc列表,但最终返回的是未经修改的原始words列表,所有处理逻辑都没有实际生效,这是运行后列内容无变化的直接原因。

其他隐藏问题

  • 你提前将整个Technology列转成了str类型,原本的空值NaN会被转为字符串'nan',无法被正常识别为空值处理。
  • 直接用原始大小写的单词判断是否属于缩写集合,若输入内容出现大小写混合的情况(比如hp、At&T),会无法匹配到预设缩写,导致被错误转成Title格式。
  • 没有做空值判断,空值调用split方法会抛出异常(你提前转str掩盖了这个问题,但会引入无效的'nan'字符串)。

修复后代码

import pandas as pd
import numpy as np

# 构造测试数据
data = [['HP', 10], ['GORDON', 15], ['AT&T', 14], [np.nan, 9], ['SAPORI TRATTORIA', 8]]
db = pd.DataFrame(data, columns = ['Technology', 'Age'])

# 预设缩写集合
acronyms = {'HP', 'GE', 'TBD', 'AT&T'}
# 统一转大写做匹配基准,避免大小写问题导致匹配失败
acronyms_upper = {acr.upper() for acr in acronyms}

def title_case_not_acronyms(orig_str):
    # 空值直接返回不处理
    if pd.isna(orig_str):
        return orig_str
    words = orig_str.split(" ")
    words_tc = [word if word.upper() in acronyms_upper else word.title() for word in words]
    # 返回处理后的列表拼接结果
    return " ".join(words_tc)

# 不提前转str,函数内自行处理空值
db['Technology'] = db['Technology'].apply(title_case_not_acronyms)

处理效果验证

原始输入处理后输出
HPHP
GORDONGordon
AT&TAT&T
NaNNaN
SAPORI TRATTORIASapori Trattoria

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:07