首页 > 解决方案 > 有条件地替换熊猫数据框中的值 - numpy where 行为

问题描述

我的目标是根据条件替换熊猫数据框中的某些值。

我发现numpy where方法期望第一个参数是一个布尔值数组,并且以下工作:

def evaluate_array(array_to_evaluate):
    output_array = []
    for elem in array_to_evaluate:
        if elem is None:
            output_array.append(True)
        else:
            output_array.append(False)
    return output_array


df['property'] = np.where(
    evaluate_array(df['property']), 
    'The value is None', 
    df.property
)

问题:

一定有更好的方式来表达上面的代码行!我尝试了以下方法:

df.loc[df.property is None, 'property'] = 'None'

但我得到了错误:

KeyError: 'cannot use a single bool to index into setitem'

公认的解决方案与我自己的工作代码一样冗长!

编辑: 以下评论中提供的一个很好的解决方案适用于我的情况,如下所示:

df = df.fillna(value={'property':'The value is None'})

甚至更具可读性:

df['property'].fillna('The value is None', inplace=True)

EDIT2: 另外,请参阅下面接受的答案以获得另一个很好的解决方案

标签: pythonpandasnumpyconditional-statementswhere-clause

解决方案


怎么样

>>> df['property'] = df['property'].fillna('The value is None')

或者,如果 None 是str你可以简单地替换:

>>> df['property'] = df['property'].replace('None','The value is None')

推荐阅读