2017-05-14 2 views
0

Ich habe eine CSV-Datei mit solchen Elementen: einige, foo, bar und ich habe eine andere Liste in Python mit verschiedenen Elementen wie att1, einige, bar, versuchen, andere. Ist für jede Liste möglich, eine Zeile in der gleichen CSV-Datei erstellen und 1 in Übereinstimmung der "Schlüssel" ist vorhanden und 0 sonst? In diesem Fall wäre das Ergebnis der csv-Datei wie folgt:Überprüfen Sie, ob eine Liste Elemente einer CSV-Datei enthalten

some,foo,bar 
1,0,1 
+1

ja, es ist möglich. Die meisten Dinge sind. Haben Sie einen Code, den Sie geschrieben haben, um dieses Problem zu lösen? –

+0

Sorry, aber ich habe keine Ahnung @PaulCollingwood – Daniele

Antwort

0

Sie könnten ein Wörterbuch mit den Schlüsseln als Spaltennamen erstellen.

Überprüfen Sie nun für jede Liste, ob die Werte in den Schlüsseln des Diktats sind, und fügen Sie sie bei Bedarf hinzu.

for list in lists: 
    for key in csv.keys(): 
    if key in list: 
     csv[key].append(1) 
    else: 
     csv[key].append(0) 
+0

Mit diesem Code ist die Reihenfolge des Elements garantiert? Sind die 1 und 0 in derselben Schlüsselspalte? – Daniele

+0

Ja, alle Werte in einer Zeile befinden sich in allen drei Listen auf dem gleichen Index, da wir für jeden Schlüssel in alle drei Listen einfügen. – squgeim

1

Hier ist ein Ansatz, mit Pandas.
Lassen Sie uns die Zusammenhänge example.csv sagen sind:

some,foo,bar 

Dann können wir Beispieldaten repräsentieren mit:

import pandas as pd 

keys = ["att1","some","bar","try","other"] 
data = pd.read_csv('~/Desktop/example.csv', header=None) 

print(data) 
     0 1 2 
0 some foo bar 

matches = data.apply(lambda x: x.isin(keys).astype(int)) 

print(matches) 
    0 1 2 
0 1 0 1 

newdata = pd.concat([data, matches]) 

print(newdata) 
     0 1 2 
0 some foo bar 
0  1 0 1 

Nun zurück zu CSV schreiben:

newdata.to_csv('example.csv', index=False, header=False) 

# example.csv contents 
some,foo,bar 
1,0,1 

Gegeben data und keys, wir können alles zu einem verketteten Befehl zusammenfassen:

(pd.concat([data, 
      data.apply(lambda x: x.isin(keys).astype(int)) 
      ]) 
    .to_csv('example1.csv', index=False, header=False)) 
Verwandte Themen