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

如何基于条件拼接Pandas两列?np.where使用遇阻求助

解决np.where生成新列的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是np.where()函数的参数不完整,同时咱们得先理清数据里的"nan"到底是什么类型,一步步来:

问题分析

  1. np.where的参数要求:这个函数必须传入三个参数:np.where(条件表达式, 条件为True时的值, 条件为False时的值),你之前只传了前两个,所以会报错。
  2. 数据里的"nan"是字符串:你的DataFrame a 里的'nan'是字符串类型,不是pandas默认的缺失值np.nan,所以判断的时候要直接比对字符串'nan'。

修正后的代码

import pandas as pd 
import numpy as np 

# DF 1
a = pd.DataFrame([1,'nan',2],columns=['a1'])
# DF 2
b = pd.DataFrame(['hola','hola','hola'],columns=['b1']) 

# 修正后的np.where用法:补充else分支
b['b2'] = np.where(a['a1'].astype(str) != 'nan', b['b1'] + a['a1'].astype(str), b['b1'])

print(b['b2'])

运行结果

0    hola1
1     hola
2    hola2
Name: b2, dtype: object

额外说明

  • 如果你的数据里是真正的缺失值np.nan(不是字符串),那判断的时候应该用a['a1'].isna(),代码会变成:
    # 假设a里是真正的NaN
    a = pd.DataFrame([1, np.nan, 2], columns=['a1'])
    b['b2'] = np.where(~a['a1'].isna(), b['b1'] + a['a1'].astype(str), b['b1'])
    
  • 你也可以用pandas自带的where方法(注意和numpy的参数顺序相反),效果一样:
    b['b2'] = (b['b1'] + a['a1'].astype(str)).where(a['a1'].astype(str) != 'nan', b['b1'])
    

内容的提问来源于stack exchange,提问作者Julio Ortegón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:15:50