首页 > 解决方案 > 从 pandas 的行中过滤出 nan 值

问题描述

我正在开发一个计算器来确定喂鱼的食物,作为一个有趣的项目来学习 python、pandas 和 numpy。

我的数据是这样组织的:

在此处输入图像描述

如您所见,我的鱼是行,不同的食物是列。

我希望做的是让用户(我)输入食物,并让程序向我输出所有非 nan 的值。

我宁愿将它们保留为 nan 而不是 0 的原因是我在不同的位置使用不同的数字来表示偏好。1是自然饮食,2是可以但不理想,3是只活。

无论如何使用熊猫来做到这一点?我在网上看到的所有地方都可以帮助我从列中过滤行,但是很难找到有关从行中过滤列的信息。

目前,我的代码如下所示:

import pandas as pd
import numpy as np


df = pd.read_excel(r'C:\Users\Daniel\OneDrive\Documents\AquariumAiMVP.xlsx')
clownfish = df[0:1]
angelfish = df[1:2]
damselfish = df[2:3]

所以,正如你所看到的,我还没有真正到达任何地方。我尝试使用以下想法过滤掉空值:

clownfish_wild_diet = pd.isnull(df.clownfish)

但这会导致错误,说:

AttributeError:“DataFrame”对象没有属性“小丑鱼”

谢谢你们的帮助。我是一个完全的熊猫菜鸟,所以非常感谢。

标签: pythonpandasdataframedata-manipulation

解决方案


您可以在 pandas 中使用掩码:

food = 'Amphipods'
mask = df[food].notnull()
result_set = df[mask]

df[food].notnull()返回一个掩码(一系列布尔值,指示每行是否满足条件),您可以使用该掩码过滤真实的 DF,使用df[mask].

通常您可以将这两行组合起来以获得更 Pythonic 的代码,但这取决于您:

result_set = df[df[food].notnull()]

这将返回一个新的 DF,其中包含满足条件的行子集(包括原始 DF 中的所有列),因此您可以在此新 DF 上使用其他操作(例如,选择列子集、删除其他缺失值等)

查看更多.notnull()https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.notnull.html


推荐阅读