我正在创建一个新变量,我的目标是在条件不成立的情况下在“ my_var”中获取缺失值,而是在“ my_var”中创建值“ NaN”,如“ df”所示。 my_var.isnull()。any()”,返回False
import pandas as pd
import numpy as np
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'age': [42, 52, 36, 24, 73],
'preTestScore': [4, 24, 31, 2, 3],
'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])
df['my_var'] = np.where((df['age']>=36) & (df['age']<=42), 'yes',np.where((df['age']>=52) & (df['age']<=73),'no',np.NaN))
df.my_var.isnull().any()
预期输出为:
data2 = {'my_var': ['yes', 'no', 'yes', np.NaN, 'no']}
df2 = pd.DataFrame(data2, columns = ['my_var'])
df2
答案 0 :(得分:3)
您可以使用numpy.select
而不是嵌套的numpy.where
:
conditions = [df['age'].between(36, 42), df['age'].between(52, 73)]
values = ['yes', 'no']
df['my_var'] = np.select(conditions, values, None)
print(df)
name age preTestScore postTestScore my_var
0 Jason 42 4 25 yes
1 Molly 52 24 94 no
2 Tina 36 31 57 yes
3 Jake 24 2 62 None
4 Amy 73 3 70 no
目前尚不清楚您的最终要求是什么
print(df['my_var'].isnull().any())
True
如果要检查布尔值True
而不是“ Truthy”值,我强烈建议您使用True
/ False
而不是"yes"
/ {{1} }。
答案 1 :(得分:2)
由于您的my_var
列不是数字,只需将np.nan
替换为None
df['my_var'] = np.where((df['age']>=36) & (df['age']<=42), 'yes',
np.where((df['age']>=52) & (df['age']<=73),'no',None))
df.my_var.isnull().any()
输出:
True