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

在Pandas DataFrame中执行条件判断时如何跳过空单元格?

问题修正方案

你原来的代码有几个关键问题:

  1. 用applymap处理整个DataFrame完全没必要,而且rstrip('backorder')是移除字符串末尾的字符,不是替换整个"backorder"值,这会把正常的1、0转成字符串,还把"backorder"变成空字符串,导致转int时报错。
  2. 条件判断的语法错误:逻辑与&两边的条件必须单独加括号,而且不需要给qty_total的判断套方括号。
  3. 生成新列时只写了列名,没做赋值操作。

下面是修正后的代码,完美解决空单元格问题,还不影响其他列:

import numpy as np
import pandas as pd

# 单独处理"In stock?"列:把"backorder"换成空值NaN,1、0原样保留
final_dataframe['In stock?'] = final_dataframe['In stock?'].apply(
    lambda x: np.nan if x == 'backorder' else x
)

# 把列转成数值类型,空值会被保留,不会触发报错
final_dataframe['In stock?'] = pd.to_numeric(final_dataframe['In stock?'], errors='coerce')

# 修正条件判断的语法:每个条件单独加括号,用&做逻辑与
conditions = [
    (final_dataframe['In stock?'] == 1) & (final_dataframe['qty_total'] < 1),
    (final_dataframe['In stock?'] == 0) & (final_dataframe['qty_total'] >= 1)
]
t_or_f = ['True', 'False']

# 生成新列,不满足条件的行(比如空值行)默认设为NaN
final_dataframe['Unlist This'] = np.select(conditions, t_or_f, default=np.nan)

print(final_dataframe)

效果说明

  • 原来的"backorder"会变成NaN,不会被强制转成int,避免报错
  • 只有值为1或0的行会参与新列的计算,空值行的"Unlist This"列也会是NaN,完全不影响其他列的内容
  • 如果想给空值行的新列设置自定义默认值(比如空字符串),把default=np.nan改成default=''即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53