工作中數據的處理中往往會遇到篩選出不符合條件的或者不包含某個字符的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