2016-05-17 1 views
1

Je travaille sur le nettoyage d'un nom de domaine.PANDAS DROP ROWS basé sur des éléments filtrés, ma solution - pas satisfait

Je souhaite supprimer certaines lignes qui correspondent à un critère. J'ai réussi à identifier les premiers critères, le second sera facile à faire.

Cependant, je ne peux pas supprimer les lignes. J'ai essayé plusieurs solutions mais le meilleur que j'ai est le suivant.

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) 

Quand je lance ce code, je reçois une sortie qui après avoir abandonné le premier élément « baddomains », imprime l'élément entier dans « DFR ». Il le fait jusqu'à ce que la boucle soit complète.

Comment puis-je filtrer le fichier csv "original" basé sur les baddomains?

+0

vous pouvez essayer d'utiliser .isin si DFR [ 'domain'] est une correspondance exacte à votre baddomains dfr.loc [~ DFR [ 'domain'] code ISIN (de baddomains_list).] –

+0

merci mais TypeError: seule liste -like objets sont autorisés à être transmis à isin(), vous avez passé un [str] – user970155

+0

Peut-être que vous pouvez fournir des exemples de données? – Alexander

Répondre

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

Merci beaucoup, dans mon moment de frustration - je n'ai pas réussi à expliquer leur est une liste de maître. Comment, puis-je utiliser cette liste pour obtenir une liste maîtresse propre pour mon ensemble de données. – user970155

+0

J'ai été en mesure de le faire en quelque sorte avec mon code terrible, ce fut le résultat. – user970155

+0

pouvez-vous s'il vous plaît regardez ici [link] https://www.mediafire.com/?zqz7azuaiqq99x5 [/ link] – user970155