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

如何创建可接收DataFrame及列的Python可复用函数?

问题解答

你当前的伪代码存在两个问题,没法直接按tb_mend_format(df1, df['Key'])的方式正常工作:

  • 函数里的df[col]逻辑矛盾:如果传入的col是df['Key'](即Pandas Series对象),df[col]会因索引不匹配报错,且此时df参数完全冗余;
  • df[col][:3]是取该列的前3行数据,不是判断每个元素的前3个字符,逻辑不符合需求。

要实现你想要的调用方式(传入Series),可以直接把函数改成接收Series参数,去掉冗余的DataFrame参数,同时修正元素级的判断逻辑:

实现方式1(apply逐元素处理)

def tb_mend_format(series):
    return series.apply(lambda x: 'TB ' + x[7:] if x.startswith('TBK') else x)

调用示例:

# 处理df1的Key列,得到新的Series
formatted_col = tb_mend_format(df1['Key'])
# 把结果加回原DataFrame
df1['Formatted_Key'] = formatted_col

实现方式2(矢量化操作,效率更高)

如果数据量较大,推荐用Pandas的矢量化字符串方法,比apply更快:

def tb_mend_format(series):
    # 复制原Series避免修改原数据
    result = series.copy()
    # 筛选出以'TBK'开头的元素
    mask = result.str.startswith('TBK')
    # 对符合条件的元素做格式调整
    result[mask] = 'TB ' + result[mask].str[7:]
    return result

如果你更倾向于传入DataFrame+列名字符串的方式(比如tb_mend_format(df1, 'Key')),函数可以这么写:

def tb_mend_format(df, col_name):
    series = df[col_name]
    mask = series.str.startswith('TBK')
    result = series.copy()
    result[mask] = 'TB ' + result[mask].str[7:]
    return result

调用时直接传列名字符串即可,同样可以把结果赋值回原DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:05:24