2017-06-20 2 views
0

Ich habe Datensatz "Alter bei 1. Ehe (Frauen)" von http://www.gapminder.org/data im Excel/CSV-Format heruntergeladen. Das Dataset hat die erste Zeile mit dem Header und die erste Spalte enthält die Namen der Länder.CSV-Datei mit numpy.genfromtxt() lesen - Trennzeichen als Teil eines Zeilennamens

Um diese Daten zu lesen, verwende ich den folgenden Code.

import numpy as np 

source=open("D:\FirstMarriage.csv") 

data = np.genfromtxt(source, dtype=None, delimiter=",", skip_header=1) 
print data 

Nach Ausführen dieses Code (in Spyder IDE) erhalte ich diesen Fehler:

ValueError: Some errors were detected ! 
Line #37 (got 118 columns instead of 117) 
Line #38 (got 118 columns instead of 117) 
Line #72 (got 118 columns instead of 117) 
Line #87 (got 118 columns instead of 117) 
Line #97 (got 118 columns instead of 117) 
Line #98 (got 118 columns instead of 117) 
Line #184 (got 118 columns instead of 117) 

Beim Öffnen der CSV-Datei mit Notepad ++ und ich sehe für die angegebenen Zeilen, die ich, dass diese Zeilen Namen enthalten finden der Länder mit Koma in ihren Namen. Darüber hinaus werden diese Namen nur in Anführungszeichen gesetzt, um darauf hinzuweisen, dass es sich um einen vollständigen Namen handelt. Aber es hilft mir nicht. Bitte beachten Sie das folgende Beispiel (ich nur die erste Spalte am angezeigt):

China 
Colombia 
"Congo, Dem. Rep." 
"Congo, Rep." 
Costa Rica 

Gibt es eine einfache Möglichkeit, diese Daten zu reinigen und zu behandeln, den Namen in Anführungszeichen als einzelne Zeichenfolge?

Ich verwende Python 2.7 (Anaconda) auf Windows 10.

Dank im Voraus!

+0

Die einfachste ist, das wahre Trennzeichen zu etwas anderem zu ändern, wie ';'. Mach das vorher mit einem Editor oder einer Filterfunktion. Der 'csv.reader' kann mit quotiertem Material umgehen, aber' genfromtxt' hat dafür keine Vorkehrungen. – hpaulj

+0

@hpaulj Ich habe die Windows-Einstellungen geändert, um Delimiter als ';' zu schreiben. Jetzt funktioniert es gut und sollte mir Probleme für die Zukunft ersparen, da dieses Symbol selten benutzt wird. Wenn ich jedoch auf einer anderen Maschine mit den zuvor beschriebenen Einstellungen (z. B. Unternehmen) arbeite, müsste ich eine robustere Lösung finden. – Roberto

Antwort

2

Der beste Weg, meiner Meinung nach, ist ein csv oder andere Zeichen getrennte Datei zu lesen, die DataFrame Klasse von Pandas zu verwenden. Sie müssen nicht mit dem Vorhandensein von Kommas umgehen, da DataFrame s alle Commons CSV-Spezifikationen befolgen.

import pandas as pd 
data = pd.read_csv(source) 
+0

Das funktioniert wirklich gut und es ist die robusteste Lösung. Vielen Dank! – Roberto

0

numpy ist nicht bekannt.

Es gibt 2 Lösungen dazu.

  1. Fügen Sie einen Pre- und Post-Prozessor hinzu, um das Komma in | zu ändern und dann zurück.
  2. Verwenden Pandas Bibliothek

    import pandas 
    pandas.read_csv(filepath_or_buffer, quotechar='"').as_matrix() 
    
0

Es kann mit 2 csv-Dateien durchgeführt werden. Die erste, die Sie erstellen müssten, um Ihre Daten von den Kommas zu entlasten und fügen Sie ein separates Trennzeichen sagen ; und die Beseitigung dieser doppelten Anführungszeichen. Für mehr Verständnis besuchen Sie: https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html Verwenden Sie den deletechars Parameter. Dann in der generierten csv-Datei verwenden Sie es als Eingabe für ein numpy-Array verwenden Sie einfach Trennzeichen als ;

Verwandte Themen