[英]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.