Szukasz sposobu na listę słów kluczowych i wyszukiwania wartości kolumn dla tych słów kluczowych. Jeśli zostanie znaleziony słowo kluczowe, a następnie usuń cały ciąg z serii i pozostaw puste miejsce. Wyszukiwanie tego wydaje się, że wielu chce upuścić cały wiersz. Chcę tylko upuścić wartość komórek kolumny.

Niektóre kontekst: Ta kolumna zawiera adresy e-mail. Czasami, jeśli e-mail nie jest dostępny, ludzie po prostu umieścili jakiś formę (N / A, N / A, Na, na@na.com itp ...). Istnieje jednak wiele sposobów, które można wpisać, a także misplike'd (n / a, na@na.c, a@n.co, n @ n itp.). Więc szukam idealnego, aby złapać wszystko, co mogę usunąć cały ciąg (wartość).

Moja logika: Utwórz listę słów kluczowych różnych kombinacji (może być długi). Jeśli zostanie znaleziony słowo kluczowe, a następnie wyjmij całą wartość ciągu.

keywords = ('na@', 'na.c', 'na@na.c', 'n@n', 'na@na.com', 'NA@')
df['column1'] = df['column1'].str.contains(keywords,"")


# This works but is going to take out a bunch of chained replace statements to get each item.
# also just removes keyword and might have extra characters left in string.
cols = ["column1","column2","column3"]
df[cols] = df[cols].replace('n/a', '').replace('N/A', '').replace('na@na.com', '')


# Works but just handles two conditions only 'na' & 'NA'
df['column1'] = df['column1'].str.replace(r'na',"", case=False)



Starting with:                   Finished:
column1                          column1
tom@gm.com                       tom@gm.com
na@na.com                        
n@n                                 
hazy@aol.com                     hazy@aol.com
n@.co                            
d88@yah.com                      d88@yah.com
a@na                             
nA@                              
chip@gm.com                      chip@gm.com

Mam nadzieję, że to ma sens. Daj mi znać, jeśli potrzebujesz dodatkowych informacji. Doceniam jakąkolwiek pomoc, którą możesz zapewnić. Z góry dziękuję.

0
Boomer 13 lipiec 2020, 22:48

1 odpowiedź

Najlepsza odpowiedź

Oto jak bym to zrobił.

Umieszczałbym moje słowa kluczowe wewnątrz zestawu, a nie krotki, ponieważ zestawy mają prędkość wyszukiwania O (1). Wtedy stworzyłbym pustą listę i iterować przez słowa i zastąpić je, jeśli będziesz potrzebować.

### This is to replicate your scenario

import pandas as pd


keywords = {'na@', 'na.c', 'na@na.c', 'n@n', 'na@na.com', 'NA@', "a@na", "nA@"}
column1 = {"column1": ["tom@gm.com", "na@na.com", "n@n",
                       "hazy@aol.com", "n@.co", "d88@yah.com",
                       "a@na", "nA@", "chip@gm.com"]}

df = pd.DataFrame(data=column1)

### End

# ACTUAL CODE
# this is where we will store the newly created words
replaced_emails = []
for email in df["column1"]:
    if email in keywords:
        # email is not valid therefore replace the invalid email with ""
        clear_email = email.replace(email, "")
        replaced_emails.append(clear_email)
    else:
        # valid email
        replaced_emails.append(email)
df["column1"] = replaced_emails

print(df)

Jeśli chcesz wykonać pętlę Foreach w jednej linii, możesz użyć rozumienia listy I.E.

df["column1"] = [email.replace(email, "") if email in keywords else email for email in df["column1"]]

Możesz umieścić jakiś rodzaj walidacji w formularzu, aby użytkownik mógł wpisać tylko poprawny adres lub po prostu nie dotyczy, jeśli nie jest dostępny

0
RamWill 14 lipiec 2020, 15:17