在Pandas DataFrame中执行条件判断时如何跳过空单元格?
问题修正方案
你原来的代码有几个关键问题:
- 用
applymap处理整个DataFrame完全没必要,而且rstrip('backorder')是移除字符串末尾的字符,不是替换整个"backorder"值,这会把正常的1、0转成字符串,还把"backorder"变成空字符串,导致转int时报错。 - 条件判断的语法错误:逻辑与
&两边的条件必须单独加括号,而且不需要给qty_total的判断套方括号。 - 生成新列时只写了列名,没做赋值操作。
下面是修正后的代码,完美解决空单元格问题,还不影响其他列:
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
相关产品推荐
相关产品推荐

