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

Pandas多列应用自定义转换函数触发TypeError问题求助

解决Pandas多列apply自定义函数触发TypeError的问题

我明白你遇到的困扰了——单列处理完全正常,多列一起操作就报错,这其实是DataFrame的apply和Series的apply行为差异导致的。让我给你拆解清楚根源,再提供几个实用的解决办法:

问题到底出在哪?

当你对单个列(Series)调用apply时,Pandas会把列里的每个元素单独传给你的函数,这时候num是单个字符串或数值,你的逻辑完全适配。

但当你对多列(DataFrame)调用apply时,默认行为是把每一列作为一个完整的Series传给函数,这时候num不再是单个值,而是一整列数据。你的函数里用" - " in num去判断,自然会触发TypeError——因为没法直接检查字符串是否存在于Series中。

解决方案1:用applymap替代apply

如果你想保留自定义函数的逻辑,只需要把apply换成applymap就行——它专门用来对DataFrame的每个元素逐一遍历处理,和Series的apply行为完全一致:

import pandas as pd
import numpy as np

def convert_dash_comma_into_float(num):
    if isinstance(num, str):  # 先判断是否为字符串,避免非字符串值做无效操作
        if " - " in num:
            num = num.replace(" - ", "0.0")
        elif "," in num:
            num = num.replace(',', '')
    try:
        return float(num)
    except ValueError:
        return np.nan

# 多列处理时用applymap
df[["rpks", "asks", "pax"]] = df[["rpks", "asks", "pax"]].applymap(convert_dash_comma_into_float)

我给函数加了isinstance(num, str)的判断,能避免遇到已经是数值类型的元素时做无效操作,更稳妥。

解决方案2:用向量化操作替代逐元素函数(更高效)

Pandas的向量化操作比逐元素循环快得多,尤其是数据量大的时候。你可以用str.replace批量处理字符串,再转成数值:

# 链式写法一步到位:替换特殊值→删除逗号→转数值(无法转换的设为NaN)
df[["rpks", "asks", "pax"]] = (
    df[["rpks", "asks", "pax"]]
    .replace(" - ", "0.0", regex=False)
    .replace(",", "", regex=False)
    .apply(pd.to_numeric, errors='coerce')
)

这里用pd.to_numeric的errors='coerce'参数,自动把无法转换的值变成NaN,省去了手动写try-except的麻烦。

解决方案3:修改自定义函数支持Series输入

如果你一定要用DataFrame的apply,可以修改函数让它能直接处理Series:

def convert_dash_comma_into_float_series(series):
    # 批量替换特殊值和逗号
    series = series.str.replace(" - ", "0.0", regex=False)
    series = series.str.replace(",", "", regex=False)
    # 转成数值,无法转换的设为NaN
    return pd.to_numeric(series, errors='coerce')

# 多列处理时用apply,默认按列传递Series
df[["rpks", "asks", "pax"]] = df[["rpks", "asks", "pax"]].apply(convert_dash_comma_into_float_series)

这种方式也是向量化的,效率比applymap更高。

测试你的样本数据

用你提供的样本数据测试的话,原始数据里的" - "会被转成0.0,带逗号的数值会去掉逗号并转成float,最终结果完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:50:05