2016-04-26 12 views
1

Ich habe csv DateiLöschen Strings aus der Datei mit Python

ID,"address","used_at","active_seconds","pageviews" 
0a1d796327284ebb443f71d85cb37db9,"vk.com",2016-01-29 22:10:52,3804,115 
0a1d796327284ebb443f71d85cb37db9,"2gis.ru",2016-01-29 22:48:52,214,24 
0a1d796327284ebb443f71d85cb37db9,"yandex.ru",2016-01-29 22:14:30,4,2 
0a1d796327284ebb443f71d85cb37db9,"worldoftanks.ru",2016-01-29 22:10:30,41,2 

und ich brauche Strings zu entfernen, dass enthält einige Worte. Es gibt 117 Wörter.

Ich versuche

for line in df: 
    if 'yandex.ru' in line: 
     df = df.replace(line, '') 

aber auf 117 Worte funktioniert es zu langsam und nachdem ich es schaffen pivot_table und Worte, die ich zu löschen versuchen, enthält in den Spalten.

   aaa       10ruslake.ru youtube.ru 1tv.ru 24open.ru 
0 0025977ab2998580d4559af34cc66a4e    0  0  34  43 
1 00c651e018cbcc8fe7aa57492445c7a2    230  0  0  23 
2 0120bc30e78ba5582617a9f3d6dfd8ca    12  0  0  0 
3 01249e90ed8160ddae82d2190449b773    25  0  13  25 

Diese Spalten enthalten nur 0

Wie kann ich es schneller tun und Zeilen zu entfernen, um die Worte in den Spalten nicht sein werden?

+3

Können Sie hinzufügen [Minimal, Complete, und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve)? – jezrael

+0

Entschuldigung, dass Sie über Ihre df-Spalten iterieren und dann testen, ob ein Wort vorhanden ist und durch eine leere Zeichenfolge ersetzt? Sind deine Wörter in einer Liste? Wenn ja, kannst du versuchen, 'pattern = '|' .join (words) 'für col in df: df [col] = df.str.replace (Muster,' ', case = False)' – EdChum

Antwort

1

IIUC können Sie isin mit boolean indexing verwenden:

print df 
           ID   address    used_at \ 
0 0a1d796327284ebb443f71d85cb37db9   vk.com 2016-01-29 22:10:52 
1 0a1d796327284ebb443f71d85cb37db9   vk.com 2016-01-29 22:10:52 
2 0a1d796327284ebb443f71d85cb37db9   2gis.ru 2016-01-29 22:48:52 
3 0a1d796327284ebb443f71d85cb37db9  yandex.ru 2016-01-29 22:14:30 
4 0a1d796327284ebb443f71d85cb37db9 worldoftanks.ru 2016-01-29 22:10:30 

    active_seconds pageviews 
0   3804  115 
1   3804  115 
2    214   24 
3    4   2 
4    41   2 

words = ['vk.com','yandex.ru'] 

print ~df.address.isin(words) 
0 False 
1 False 
2  True 
3 False 
4  True 
Name: address, dtype: bool 

print df[~df.address.isin(words)] 
           ID   address    used_at \ 
2 0a1d796327284ebb443f71d85cb37db9   2gis.ru 2016-01-29 22:48:52 
4 0a1d796327284ebb443f71d85cb37db9 worldoftanks.ru 2016-01-29 22:10:30 

    active_seconds pageviews 
2    214   24 
4    41   2 

Dann pivot verwenden:

print df[~df.address.isin(words)].pivot(index='ID', columns='address', values='pageviews') 
address       2gis.ru worldoftanks.ru 
ID               
0a1d796327284ebb443f71d85cb37db9  24    2 

Eine andere Lösung wird entfernt Zeilen, wenn in irgendeiner Spalte 0 (zB pageviews):

print df 

           ID   address    used_at \ 
0 0a1d796327284ebb443f71d85cb37db9  youtube.ru 2016-01-29 22:10:52 
1   0a1d796327284ebfsffsdf  youtube.ru 2016-01-29 22:10:52 
2 0a1d796327284ebb443f71d85cb37db9   vk.com 2016-01-29 22:10:52 
3 0a1d796327284ebb443f71d85cb37db9   2gis.ru 2016-01-29 22:48:52 
4 0a1d796327284ebb443f71d85cb37db9  yandex.ru 2016-01-29 22:14:30 
5 0a1d796327284ebb443f71d85cb37db9 worldoftanks.ru 2016-01-29 22:10:30 

    active_seconds pageviews 
0   3804   0 
1   3804   0 
2   3804  115 
3    214   24 
4    4   2 
5    41   2 
+0

Ich habe die Frage von einem anderen Konto gestellt http://stackoverflow.com/questions/36839602/save-table-to-different-excel-sheets-using-python/36839659?noredirect=1#comment61250977_36839659. Ich muss Spalten mit einer 'URL' löschen. Und ich versuche, Strings in der ursprünglichen 'csv'-Datei zu löschen und danach eine' pivot_table' zu ​​erstellen. –

+1

Hmmm, Sie müssen einige Zeilen in Daten löschen, wobei die Spalte 'address' einige Strings enthält? Oder Teilstrings? vor dem Dreh? Wenn ja, benötigen Sie ['isin'] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.isin.html) mit [' boolean indexing'] (http: // pandas .pydata.org/pandas-docs/stable/indexing.html # boolean-indexing) – jezrael

+1

kleiner Punkt wäre das nicht besser lesbar 'df [df.pageviews! = 0]'? – EdChum

0

Der schnellste Weg, ich weiß, um mit CSV-Dateien zu arbeiten, ist die Verwendung der Paket Pandas, um einen Datenrahmen daraus zu erstellen.

import pandas as pd 

df = pd.read_csv(the_path_of_your_file,header = 0) 
df.ix[df.ix[:,'address'] == 'yandex.ru','address'] = '' 

Dies ersetzt die Zellen, die 'yandex.ru' enthalten, durch eine Zelle mit einer leeren Zeichenfolge. Dann können Sie es als csv schreiben zurück mit:

df.to_csv(the_path_of_your_file) 

Wenn das, was Sie tun möchten, ist die Zeilen zu löschen, wenn diese URL auftritt, zu verwenden:

df = df.drop(df[df.address == 'yandex.ru'].index) 
Verwandte Themen