如何基于条件拼接Pandas两列?np.where使用遇阻求助
解决np.where生成新列的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是np.where()函数的参数不完整,同时咱们得先理清数据里的"nan"到底是什么类型,一步步来:
问题分析
- np.where的参数要求:这个函数必须传入三个参数:
np.where(条件表达式, 条件为True时的值, 条件为False时的值),你之前只传了前两个,所以会报错。 - 数据里的"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
相关产品推荐
相关产品推荐

