熊猫系列的真相价值含糊不清

时间:2018-07-12 19:44:04

标签: pandas

我有一个熊猫数据框。我想检查特定列中的值,并根据它是否为空/不为空创建一个标志列。

df_have:

A     B
1     
2     X

df_want

A    B   B_Available
1          N
2    X     Y

我做到了:

def chkAvail(row):
    return (pd.isnull(row['B']) == False)

if (df_have.apply (lambda row: chkAvail(row),axis=1)):
    df_want['B_Available']='Y'

我知道了

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您可以使用

df['B_available'] = df.B.notnull().map({False: 'N', True:'Y'})

如果空白值为NaNNone。如果它们是空格,请

df['B_available'] =  (df.B != ' ').map({False: 'N', True:'Y'})

执行if series并不是一个好主意,因为可能有很多TrueFalse串联。例如。 if pd.Series([True, False, True, True])是什么意思?没有道理;)

答案 1 :(得分:2)

您也可以使用np.select

# In case blank values are NaN
df['B_Available'] = np.select([df.B.isnull()], ['N'], 'Y')

# In case blank values are empty strings:
df['B_Available'] = np.select([df.B == ''], ['N'], 'Y')

>>> df
   A    B B_Available
0  1  NaN           N
1  2    X           Y

答案 2 :(得分:2)

通过使用np.where

df['B_Available']=np.where(df.B.eq(''),'N','Y')
df
Out[86]: 
   A  B B_Available
0  1              N
1  2  X           Y