Big*_*h95 7 python data-manipulation dataframe pandas
我正在开发一个计算器来确定给鱼喂什么,这是一个学习 python、pandas 和 numpy 的有趣项目。
我的数据是这样组织的:
正如你所看到的,我的鱼是行,不同的食物是列。
我希望做的是让用户(我)输入食物,然后让程序向我输出所有非 nan 的值。
我宁愿将它们保留为 nan 而不是 0 的原因是我在不同的位置使用不同的数字来表示偏好。1是自然饮食,2是可以,但不理想,3是只吃生食。
有没有办法使用 pandas 来做到这一点?我在网上查找的每个地方都可以帮助我从列中过滤行,但是很难找到有关从行中过滤列的信息。
目前,我的代码如下所示:
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]
Run Code Online (Sandbox Code Playgroud)
所以,正如你所看到的,我还没有真正取得任何进展。我尝试使用以下想法过滤掉空值:
clownfish_wild_diet = pd.isnull(df.clownfish)
Run Code Online (Sandbox Code Playgroud)
但它会导致一个错误,说:
AttributeError:“DataFrame”对象没有属性“clownfish”
谢谢你们的帮助。我是一个十足的熊猫菜鸟,所以非常感谢。
您可以在 pandas 中使用掩码:
food = 'Amphipods'
mask = df[food].notnull()
result_set = df[mask]
Run Code Online (Sandbox Code Playgroud)
df[food].notnull()
返回一个掩码(一系列布尔值,指示每行是否满足条件),您可以使用该掩码来过滤真实的 DF df[mask]
。
通常你可以将这两行组合起来以获得更多Python风格的代码,但这取决于你:
result_set = df[df[food].notnull()]
Run Code Online (Sandbox Code Playgroud)
这将返回一个新的 DF,其中包含满足条件的行子集(包括原始 DF 中的所有列),因此您可以在此新 DF 上使用其他操作(例如,选择列的子集、删除其他缺失值等)
查看更多信息.notnull()
:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.notnull.html