我正在创建一个新变量,我的目标是在条件不成立时在“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
请您参考如下方法:
您可以使用 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
如果您正在检查 bool 值 True,而不是“Truthy”值,我强烈建议您使用 True/False 而不是 "is"/“否”。
