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

Pandas基于多列值新增列时np.select触发类型错误如何解决?

报错原因
  1. np.select要求传入的条件列表每个元素是和原数据集长度一致的布尔数组,用于逐行匹配条件。原代码中使用df_1.loc[判断条件]返回的是符合条件的子DataFrame,不满足参数要求,直接触发TypeError: invalid entry 0 in condlist: should be boolean ndarray报错。
  2. 数据中B、C列混入了空字符串,列类型为object而非数值类型,直接做数值比较也可能引发类型异常,部分低版本numpy、pandas混用场景下会触发参数不匹配的na关键字相关报错。
解决方法

先将B、C列转为数值类型,空值统一处理为NaN,再调整条件列表的写法即可:

import pandas as pd
import numpy as np

data_1 = {'A': ['Emo/3', 'Emo/4', 'Emo/1','Emo/3', '','Emo/3', 'Emo/4', 'Emo/1','Emo/3', '', 'Neu/5', 'Neu/2','Neu/5', 'Neu/2'],
        'Pos': ["repeat3", "repeat3", "repeat3", "repeat3", '',"repeat1", "repeat1", "repeat1", "repeat1", '', "repeat2", "repeat2","repeat2", "repeat2"],
        'B': [0, 0, 0, 0, '', 1, 2, 3, 4, '', 4, 2, 3, 1],'C': [0, 2, 1, 3, '', 4, 2, 3, 1, '', 4, 2, 3, 1]}
df_1 = pd.DataFrame(data_1)

# 处理B、C列为数值类型,空值转为NaN
df_1['B'] = pd.to_numeric(df_1['B'], errors='coerce')
df_1['C'] = pd.to_numeric(df_1['C'], errors='coerce')

# 条件直接写布尔判断表达式,无需套loc
conditions = [
    (df_1['B'] == 1) & (df_1['C'] == 1),
    (df_1['B'] == 2) & (df_1['C'] == 1),
    (df_1['B'] == 3) & (df_1['C'] == 1)
]
choices = [1,1,0]
df_1['D'] = np.select(conditions, choices, default='')

运行后新列D会按照规则赋值,不满足条件的位置留空,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:36:04