2016-08-02 22 views
0

Python dict ist in einem Format wie folgt aus:Python dict in kommagetrennte CSV-Datei

'{"a":1, "b":2, "c":3}' 

Hinweis es Komma verwenden, um verschiedene Schlüssel zu trennen: Wert-Paaren.

Das Problem ist, ich eine CSV-Datei haben, die zu separaten Spalten durch Komma ist:

' 
    "id", "gender", "age", "name" 
"001",  "male", "14", "{"first":"Mike", "last":"Green"}" 
"002", "female", "15", "{"first":"Kate", "last":"Spear"}" 
' 

Wenn ich
pandas.read_csv('csvfile.csv', sep = ',', names=["id", "gender", "age", "name"])

Ich habe:

' 
    "id", "gender", "age", "name" 
"001",  "male", "14", "{"first":"Mike" 
"002", "female", "15", "{"first":"Kate" 
' 

Der Grund Ich denke, csv-Leser betrachtet das Komma folgt dem Vornamen in dict als Trennzeichen in CSV-Dateien. Da ich nur 4 Spalten mit den Namen "" id "," gender "," age "," name "" angegeben habe, ignoriere ich die Nachnamen.

Irgendwelche Gedanken oder mögliche Lösung zu diesem? Vielen Dank!

+2

Wie haben Sie diese Datei überhaupt erstellt? Das Zitat ist auch ziemlich nutzlos. –

+0

Ja, ich denke, sie sind auch nutzlos. Dieser Datensatz wird von anderen Personen erstellt. Wenn ich das täte, würde ich lieber nicht python dict in diesem Feld verwenden. Jetzt ist das Problem hier, ich versuche auf dieser Grundlage etwas zu arbeiten. –

+0

Leider ist 'pandas.read_csv()' etwas anspruchsvoller, was eine akzeptable Eingabedatei ausmacht. Die ''python''-Engine akzeptiert einen Iterator, erwartet dann aber, dass es sich um ein' csv.reader() '-Objekt handelt. Vorläufig keine Zeit mehr. –

Antwort

0

Sie können das Trennzeichen ändern, das read_csv verwendet. Wenn Sie die CSV-Dateien ändern können ein Semikolon zum Trennen von Spalten zu verwenden, können Sie dann read_csv(file.csv, sep=';'...)

verwenden Alternativ können Sie das Zitat aus

"001",  "male", "14", "{"first":"Mike", "last":"Green"}" 

zu

"001",  "male", "14", "{'first':'Mike', 'last':'Green'}" 

Natürlich beheben beide Methoden meine Bearbeitung der CSV-Datei.

Die zweite sieht solider aus. Der reguläre Ausdruck (\{[^"]*)(")([^}]*\}) könnte verwendet werden, um Anführungszeichen in geschweiften Klammern zu finden. (ungetestet)