簡體   English   中英

如果字符串包含某些子字符串,則按條件過濾

[英]Filter by condition if string contains certain substring

我有一個充滿電子郵件的數據框。 知道 gmail 最少有 6 個字符,我想通過刪除用戶名少於 6 個字符的任何 gmail 地址來過濾我的數據框。 因此,數據幀df

>> print(df)

        email          
1   a@gmail.com             
2   real.email@gmail.com      
3   no.email@email.com        
4   real@yahoo.com              
5   poo@gmail.com              

會成為:

        email                     
2   real.email@gmail.com      
3   no.email@email.com        
4   real@yahoo.com              

使用

df = df[
        (len(df['email'].str.split('@').str[0]) >= 6)
        (df['email'].str.split('@').str[1] == 'gmail.com')
       ]

將過濾所有不是@gmail.com 的內容,所以我不能使用它。 我想要的是本質上(這顯然不起作用並給出了一個TypeError: 'method' object is not subscriptable

if df['email'].str.split['@'].str[1] == 'gmail.com':
    len(df['email'].str.split['@'].str[0]) >= 6

如何在矢量化操作中完成此操作?

您可以使用:

a = df['email'].str.contains('gmail') #check if email has gmail
b = df['email'].str.split('@').str[0].str.len().gt(6) #check if length before "@" > 6
out = df[a&b|~a]

print(out)

                  email
2  real.email@gmail.com
3    no.email@email.com
4        real@yahoo.com

看到這個:

>>> df[(df["email"].str.split("@").str[0].str.len() >= 6) | (df["email"].str.split("@").str[1] != 'gmail.com')]
                  email
1  real.email@gmail.com
2    no.email@email.com
3        real@yahoo.com

關於您所說的“將過濾所有不是@gmail.com 的內容”,這是不正確的。 您只需要使您的布爾邏輯正確(如上)。 同樣要測量數據幀中的字符串長度,您應該使用.str.len()但不要取整個數據幀輸出的len ,后者將是數據幀的大小。

你可以做:

df=df.loc[~df.email.str.contains(r"^.{0,5}@gmail\.com$")]

輸出:

                  email
1  real.email@gmail.com
2    no.email@email.com
3        real@yahoo.com

一種方法是將索引存儲在列表中,然后只顯示這些索引:

ls=[]
for i in range(0,len(df)):
    if df['email'][i].split('@')[1] == 'gmail.com':
        if len(df['email'][i].split('@')[0]) >= 6:
            ls.append(i)

df[df.index.isin(ls)]

輸出:

                  email
1  real.email@gmail.com
2    no.email@email.com
3        real@yahoo.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM