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

如何修改Pandas DataFrame中以-*开头、*结尾的单元格值

问题解决方法

报错原因

df.apply()默认按列遍历,传入lambda的参数是整列的Series对象,对Series直接做if布尔判断会触发歧义错误,同时你写的字符串匹配规则也和实际要处理的-*开头、*结尾的格式不匹配。

实现方案

方案1:applymap单单元格处理(逻辑直观)

applymap会作用于DataFrame的每个单元格,直接对单个值做判断处理:

def format_cell(val):
    # 仅对字符串类型做格式校验
    if isinstance(val, str):
        val = val.strip()
        if val.startswith('-*') and val.endswith('*'):
            # 提取中间数值返回整数类型
            return int(val[2:-1])
    return val

# 应用到全表
df = df.applymap(format_cell)

方案2:正则批量替换(性能更优,适合大数据量)

用pandas内置的正则替换方法批量处理所有符合规则的内容,无需逐行遍历:

# 正则匹配-*开头、*结尾的内容,提取中间部分
df = df.replace(r"^-\*(.+)\*$", r"\1", regex=True)
# 可选:把数值列统一转成整数类型
df[["salary", "age", "Id"]] = df[["salary", "age", "Id"]].astype(int)

两种方案运行后都能得到你需要的处理结果。

内容的提问来源于stack exchange,提问作者Let'sbecool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:02