![](/img/trans.png)
[英]Pandas: Remove all rows where any of the column contains a certain substring
[英]How to keep a row if any column contains a certain substring?
我有一個 pandas DataFrame df:
import pandas as pd
# Create a Pandas dataframe from some data.
df = pd.DataFrame({'Var1': ['d', 'a --> b', 'e', 'c --> d'],
'Var2': ['a', 'e', 'a --> b', 'd'],
'Var3': ['c', 'd', 'a --> b', 'e']})
打印時看起來像這樣(供參考):
| | Var1 | Var2 | Var3 |
|---|---------|---------|---------|
| 0 | d | a | c |
| 1 | a --> b | e | d |
| 2 | e | a --> b | a --> b |
| 3 | c --> d | d | e |
我想只保留包含值“-->”的第 1、2 和 3 行。 換句話說,我想刪除 dataframe 中至少不包含一個值為“-->”的列的所有行。
我知道如何只過濾一列, df[df['Var1'].str.contains('-->', regex=False)]
就像給了我第 1 行和第 3 行。
但我不知道如何應用於所有列。 我在這里和這里閱讀了一些類似的案例,但不知道如何適應我的案例。
你能建議一種方法來 select 這些行嗎?
將所有列合二為一並搜索 substring:
df[df.sum(axis=1).str.contains('-->')]
# Var1 Var2 Var3
#1 a --> b e d
#2 e a --> b a --> b
您可以使用它過濾掉它們。
df1= df[df.apply(lambda x: any(x.str.contains('-->')),axis=1)]
print (df1)
output 將是:
原裝DataFrame:
Var1 Var2 Var3
0 d a c
1 a --> b e d
2 e a --> b a --> b
3 c d e
DF1:僅包含帶箭頭的行
Var1 Var2 Var3
1 a --> b e d
2 e a --> b a --> b
嘗試.stack()
與 boolean 索引。
s = df.stack().str.contains('-->').reset_index(1,drop=True)
df.loc[s[s].index.unique()]
Var1 Var2 Var3
1 a --> b e d
2 e a --> b a --> b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.