簡體   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