np.where 用字符串创建缺失值

np.where to create missing value wih a string

我正在创建一个新变量,我的目标是在条件不成立时在 "my_var" 中获取缺失值,而是在 "my_var " 中创建值 "NaN",如 "df.my_var.isnull().any()" 所示,其中 returns 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

由于您的 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

您可以使用 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" / "no".