2016-05-17 7 views
1

Ich arbeite an der Reinigung einer Liste Domain-Namen.PANDAS DROP REIHEN basierend auf gefilterten Elementen, meine Lösung - nicht zufrieden

Ich möchte bestimmte Zeilen löschen, die ein Kriterium "passen". Es ist mir gelungen, das erste Kriterium zu bestimmen, das zweite wird leicht zu machen sein.

Allerdings kann ich die Zeilen nicht fallen lassen. Ich habe mehrere Lösungen ausprobiert, aber das Beste, was ich habe, ist folgendes.

from wordsegment import segment 
import pandas as pd 

def assignname(): 
    dfr = pd.read_csv('data.net.date.csv') 

    for domainwtld in dfr.domain: 
     dprice = dfr.price 
     domainwotld = domainwtld.replace(".net", "") 
     seperate = wordsegment.segment(domainwotld) 
     dlnt = (min(seperate, key=len)) 
     slnt = len(dlnt) 
     if slnt <= 1: 
      baddomains = domainwtld 
      a = dfr.loc[dfr['domain'] < (baddomains)] 
      print (a) 

Wenn ich diesen Code ausführen, erhalte ich eine Ausgabe, dass nach dem ersten Eintrag in „baddomains“ dropping, druckt das gesamte Objekt in „dfr“. Dies geschieht, bis die Schleife abgeschlossen ist.

Wie kann ich die "ursprüngliche" CSV-Datei basierend auf baddomains filtern?

+0

Sie könnten versuchen, mit .isin wenn dfr [ 'domain'] eine genaue Übereinstimmung zu Ihrem baddomains dfr.loc ist [~ dfr [ 'domain'] isin (baddomains_list).] –

+0

Dank aber Typeerror: nur Liste -ähnliche Objekte dürfen an isin() übergeben werden, Sie haben eine [str] übergeben – user970155

+0

Vielleicht können Sie einige Beispieldaten liefern? – Alexander

Antwort

0
from wordsegment import segment 
import pandas as pd 

url = 'http://download1474.mediafire.com/3ndc8vevwtng/sa4ifz8rixe7m8u/data.net.date+%285%29.csv' 
dfr = pd.read_csv(url) 
dfr['domain'] = dfr.domain.str.replace(".net", "") 
dfr['words'] = df.domain.apply(segment) 
good_domains = dfr[dfr.words.apply(lambda words: len(min(words, key=len))) > 1] 
bad_domains = dfr[~dfr.domain.isin(good_domains.domain)] 

>>> bad_domains 
     domain price   words 
2  keeng 700  [keen, g] 
14  ymall 777  [y, mall] 
22  idisc 850  [i, disc] 
26  borsen 877  [borse, n] 
38 cellacom 895 [cell, a, com] 
51  iwealth 999  [i, wealth] 
96  iplayer 1500  [i, player] 
116 mcommerce 2000 [m, commerce] 
118  apico 2052  [a, pico] 
134  epharm 2500  [e, pharm] 
139  ionica 2579  [ionic, a] 
153 kasiino 2999 [kasi, in, o] 
155 alpadia 3000 [al, padi, a] 
158 similans 3152 [similan, s] 
163 ifuture 3499  [i, future] 

>>> bad_domains.domain.tolist() 
['keeng', 
'ymall', 
'idisc', 
'borsen', 
'cellacom', 
'iwealth', 
'iplayer', 
'mcommerce', 
'apico', 
'epharm', 
'ionica', 
'kasiino', 
'alpadia', 
'similans', 
'ifuture'] 
+0

Vielen Dank, in meinem Moment der Frustration - ich konnte nicht erklären, dass es eine Master-Liste ist. Wie verwende ich diese Liste, um eine saubere Hauptliste für meinen Datensatz zu erhalten. – user970155

+0

Ich konnte das irgendwie mit meinem schrecklichen Code machen, das war das Ergebnis. – user970155

+0

können Sie bitte hier [link] https://www.mediafire.com/?zqz7azuaiqq99x5 [/ link] – user970155