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