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

Pandas多列应用带IF判断的lambda函数保留空值的方法

问题根因

你之前添加的x.empty判断逻辑完全无法匹配目标处理场景:x.empty是pandas中Series/DataFrame的属性,作用是判断整个数据对象是否没有任何元素,根本不会逐行检查单元格内的单个值是否为空白。因此当代码遍历到单元格存储的空字符串''时,仍然会执行除以100、字符串格式化的逻辑,空字符串无法转成数值参与运算,自然会持续触发ValueError: invalid literal for int() with base 10: ''报错。

正确实现方法

空值判断的逻辑要下沉到处理单个单元格值的内层函数里,碰到空字符串、None、NaN这类空值时直接原样返回,非空值再执行除以100、千分位格式化保留两位小数的操作即可。

可读性优先写法

单独抽离格式化处理的函数,逻辑更清晰,后续调整规则也方便:

import pandas as pd

def format_num(value):
    # 覆盖空字符串、None、pandas自动识别的NaN三类空值场景
    if pd.isna(value) or value == '':
        return value
    return '{:,.2f}'.format(value / 100)

df[['col_8', 'col_9', 'col_10']] = df[['col_8', 'col_9', 'col_10']].apply(
    lambda col: col.apply(format_num)
)

简洁lambda写法

如果不想单独定义函数,可以直接在内层lambda里写三元判断:

import pandas as pd

df[['col_8', 'col_9', 'col_10']] = df[['col_8', 'col_9', 'col_10']].apply(
    lambda col: col.apply(lambda v: v if (pd.isna(v) or v == '') else '{:,.2f}'.format(v/100))
)

注意事项

  • 如果你的数据集在读取时已经把空白单元格自动转成了pandas的NaN空值,判断条件里的or v == ''可以省略,仅保留pd.isna(v)就能覆盖所有空值场景。
  • 不要用逐行循环遍历的方式实现这个需求,基于列的apply方法性能远高于逐行迭代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:12:26