繁体   English   中英

根据条件从 pandas DataFrame 中删除行

[英]Remove rows from pandas DataFrame based on condition

我是熊猫的新手,所以请原谅新手的问题!

我有以下代码;

import pandas as pd

pet_names = ["Name","Species"
"Jack","Cat"
"Jill","Dog"
"Tom","Cat"
"Harry","Dog"
"Hannah","Dog"]

df = pd.DataFrame(pet_names)

df = df[df['Species']!='Cat']

print(df)

我想删除“物种”列中所有包含“猫”的行,留下所有的狗。 我该怎么做呢? 不幸的是,此代码当前正在返回错误。

通用boolean indexing

df[df['Species'] != 'Cat']
# df[df['Species'].ne('Cat')]

  Index    Name Species
1     1    Jill     Dog
3     3   Harry     Dog
4     4  Hannah     Dog

df.query

df.query("Species != 'Cat'")

  Index    Name Species
1     1    Jill     Dog
3     3   Harry     Dog
4     4  Hannah     Dog

有关pd.eval()系列函数、它们的特性和用例的信息,请访问使用 pd.eval() 在 pandas 中进行动态表达式评估


df.isin

df[~df['Species'].isin(['Cat'])]

  Index    Name Species
1     1    Jill     Dog
3     3   Harry     Dog
4     4  Hannah     Dog

您的代码df[df['Species']!='Cat']是正确的。 这是您的数据框初始化代码错误。 请参阅用户cs95的其他评论。

虽然另一个答案是正确的,但我更喜欢在删除行时使用drop() ,因为它比使用逆逻辑(保留不是 Cats 的行)更直接。 像这样的简单示例没有区别,但是如果您开始有更复杂的逻辑来删除哪些行,那么这很重要。 例如,删除A=1 AND (B=2 OR C=3)的行。

下面是你如何使用drop()和条件逻辑:

df.drop( df.query(" `Species`=='Cat' ").index)

对于更复杂的逻辑,这是一种更具可扩展性的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM