1. 程式人生 > 其它 >pandas 獲取不符合條件/不包含某個字串的dataframe

pandas 獲取不符合條件/不包含某個字串的dataframe

工作中資料的處理中往往會遇到篩選出不符合條件的或者不包含某個字元的dataframe,我們會如何去做呢?

可能你會想到用python寫一個函式,然後用panda的apply函式或者map函式來進行處理,不可否認這是一中方法,但是實際上pandas中已經給我們開發了這樣的函式,那我們為什麼不直接呼叫呢?

首先看一下,怎麼篩選出包含某些字串的資料

#這是使用語法,模糊匹配
df[ df['通訊名稱'].str.contains('聯通|移動|小靈通|電信')]
#這一種方法不是匹配,而是等於後面列表中的值,要注意區別
df[ df['通訊名稱'].isin(['聯通','移動','小靈通','
電信'])]

包含的字串比較多時就用’|‘管道符隔開

那取出不包含這些字串的資料怎麼操縱呢,很簡單,就是在前面加上一個~這種波浪符號就可以了

df[~ df['通訊名稱'].str.contains('聯通|移動|小靈通|電信')]

沒錯就是這麼簡單的操作,但是contains也有一個不好的地方,就是如果某一列資料時文字型資料,處理起來就不是那麼完美,因為contains函式類似於模糊查詢,所以會出現錯誤匹配或者超出我們需要的匹配範圍

問題又來了如果我們的條件是多個怎麼辦呢?

我們就需要這樣來做

df[ df['通訊名稱'].str.contains('聯通|移動|小靈通|電信') | df['
通訊備註'].str.contains('公告|活動|提示|優惠') ] # 或者這樣寫 df[df["col1"].str.contains('this|that')==False and df["col2"].str.contains('foo|bar')==True]

當然,到哪裡都離不開的正則表示式在這裡也是可以用的

pattern=r'.*?'
df[df[columns].str.contains(pattern)]

這樣你就可以根據自己的需求快樂的指定匹配原則了。

版權宣告:本文為CSDN博主「Danker01」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_42575020/article/details/95344914