【问题标题】:None in if condition, how to handle missing data?如果条件没有,如何处理丢失的数据?
【发布时间】:2019-01-24 08:16:50
【问题描述】:

如果缺少age 的值,我想创建一个值为1 的变量。相反,Value 列的输出中的所有内容都是 None

raw_data1 = {'id': [1,2,3,5],
    'age': [0, np.nan, 10, 2]}
df1 = pd.DataFrame(raw_data1, columns = ['id','age'])


def my_test(b):
    if b is None:
        return 1


df1['Value'] = df1.apply(lambda row: my_test(row['age']), axis=1)  

如何实现呢?我知道有几种方法,但我想重点介绍一个函数的使用(def my_test 等)。

【问题讨论】:

  • 如果 b 不是 Nonemy_test 方法会返回 None。在if 之后添加return b 应该可以解决这个问题。
  • 你的意思是这样吗?如果返回 b 为无:(这不起作用,谢谢)

标签: python pandas if-statement missing-data nonetype


【解决方案1】:

您可以为此使用map

df1['Value'] = df1['age'].map(lambda x : 1 if np.isnan(x) else np.nan)

如果你想使用你的功能,你可以像这样使用map

def my_test(b):
    if np.isnan(b):
        return 1
    else:
        return np.nan

df1['Value'] = df1['age'].map(lambda x : my_test(x))

【讨论】:

    【解决方案2】:

    改为这样做,

    >>> df1.value = df1.age.isna().astype(int)
    >>> df1
        id   age  value
     0   1   0.0      0
     1   2   NaN      1
     2   3  10.0      0
     3   5   2.0      0
    

    【讨论】:

      【解决方案3】:

      您可以使用row.get('age') 代替row['age']

      如果age 不在字典内,get() 返回 null

      【讨论】:

        【解决方案4】:

        如果我理解正确,你可以使用:

        df1['value'] = np.where(df1['age'].isnull(), 1, '')
        

        输出:

           id   age value
        0   1   0.0      
        1   2   NaN     1
        2   3  10.0      
        3   5   2.0      
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-18
          • 2020-10-03
          • 1970-01-01
          • 2010-11-25
          • 1970-01-01
          • 2013-01-19
          • 1970-01-01
          相关资源
          最近更新 更多