我已经创建了一个函数,该函数根据“名称”列中的数据测试多个IF语句。
条件1:如果“名称”为空白,则返回“ Secondary_Name”。但是,如果“ Secondary_Name”也为空,则返回“ Third_Name”。
条件2:如果“名称” ==“通用”,则返回“第二名称”。但是,如果“ Secondary_Name”也为空,则返回“ Third_Name”
其他:返回“名称”
Dirty
我尝试过== None,== np.NaN,== Null,.isnull(),=='',=='0'。
似乎没有什么可以代替空值。
编辑:
答案 0 :(得分:0)
取决于列dtype,无论出于何种原因,NULL都不能与NaN很好地交互。 没有值表示该字段为空,不是因为您对给定的dtype有一个“值”。
确保您可以识别NaN的简单方法是查看该字段是否等于其自身
def isNaN(value):
if value != value:
return True
else:
return False
并提供一个示例:
df = pd.DataFrame(data={'ClientId':[1,2,3,4] , 'SomeNULLs':['main','main',None,None], 'NewNULLs':[1,None,0,1]})
df['Test'] = df.NewNULLs.apply(isNaN)
结果数据集应该是
ClientId SomeNULLs NewNULLs Test
0 1 main 1.0 False
1 2 main NaN True
2 3 None 0.0 False
3 4 None 1.0 False
答案 1 :(得分:0)
考虑这个df
df = pd.DataFrame({'Name':['a', 'GENERAL', None],'Secondary_Name':['e','f',None], 'Third_Name':['x', 'y', 'z']})
Name Secondary_Name Third_Name
0 a e x
1 GENERAL f y
2 None None z
由于您是用python编写函数,因此可以使用None
def account_name(row):
if (row['Name'] is None or row['Name'] == 'GENERAL') and (row['Secondary_Name'] is None):
return row['Third_Name']
elif row['Name'] is None or row['Name'] == 'GENERAL':
return row['Secondary_Name']
else:
return row['Name']
df['Name'] = df.apply(account_name, axis = 1)
你得到
Name Secondary_Name Third_Name
0 a e x
1 f f y
2 z None z
您可以使用pandas和嵌套的np.where
获得相同的输出cond1 = (df['Name'].isnull()) | (df['Name'] == 'GENERAL')
cond2 = (cond1) & (df['Secondary_Name'].isnull())
np.where(cond2, df['Third_Name'], np.where(cond1, df['Secondary_Name'], df['Name']))