python - 有条件地替换熊猫数据框中的值 - 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: 另外,请参阅下面接受的答案以获得另一个很好的解决方案
解决方案
怎么样
>>> df['property'] = df['property'].fillna('The value is None')
或者,如果 None 是str
你可以简单地替换:
>>> df['property'] = df['property'].replace('None','The value is None')
推荐阅读
- java - 如何设置微调器初始文本“SELECT ONE”?
- android - 错误:已添加片段:GrowthStoryFragment
- centos - zabbix如何监控虚拟IP?
- laravel - Laravel 缓存路由文件访问,5.8 版
- azure-devops - 如何将自定义 Angular 库包添加到 Azure DevOps?
- html - CSS 图像大小。左边是文字,右边是图片
- java - 在 Apacke Spark 中使用 StructType 创建 JSON 模式
- c++ - 如何斜切拉伸的矩形
- java - 使用 List.stream 将对象列表分组到另一种类型的对象列表
- android - 错误:无法解决:片段受影响的模块:app