2017-12-18 4 views
0

Ich importiere Daten aus einer CSV-Datei für die Verwendung in einem Pandas-Datenrahmen. Meine Datendatei hat 102 Zeilen und 5 Spalten und alle sind in Excel eindeutig als "Nummer" gekennzeichnet. Mein Code ist wie folgt:Warum interpretiert Pandas Datenrahmen alle Daten als NaN?

  TopThird Oxbridge Russell Other Low 
0 14\t1\t12\t35\t1  NaN  NaN NaN NaN 
1 14\t1\t12\t32\t0  NaN  NaN NaN NaN 
2 16\t0\t13\t33\t0  NaN  NaN NaN NaN 
3 10\t0\t9\t44\t1  NaN  NaN NaN NaN 
4 18\t1\t13\t28\t1  NaN  NaN NaN NaN 

Und dies weiter unten auf der Datenrahmen:

import pandas as pd 

data = pd.read_csv('uni.csv', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

print data.head() 

Die Ausgabe sieht wie folgt aus. Ich habe versucht, den Zelltyp in Excel zu "Allgemein" zu ändern oder Dezimalpunkte auf dem Typ "Zahl" zu verwenden, aber das hat nichts geändert.

Warum passiert das? Wie kann es verhindert werden?

+0

, weil Sie nicht haben passierte den richtigen Separator. Fügen Sie einen Parameter 'delim_whitespace = True' zu' read_csv' hinzu. –

+0

Alternativ können Sie als TSV 'pd.read_fwf (...)' verwenden. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Danke, der erste funktioniert. Fühlen Sie sich frei, als Antwort zu veröffentlichen, wenn Sie eine Erklärung damit einschließen möchten. – user7490953

Antwort

1

Es scheint, wie Sie Ihre Datei eine Datei von Tabulatoren getrennte Werte ist. Sie müssen read_csv explizit wissen lassen, dass es Leerzeichen als Trennzeichen verwendet.

In den meisten Fällen sollte die Übergabe sep='\t' funktionieren.

df = pd.read_csv('uni.csv', 
       sep='\t', 
       header=None, 
       names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

In einigen Fällen sind Spalten jedoch nicht perfekt tab-separiert. Vorausgesetzt, dass Sie eine TSV Zahlen haben, sollte es in Ordnung sein delim_whitespace=True zu verwenden -

df = pd.read_csv('uni.csv', 
       delim_whitespace=True, 
       header=None, 
       names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 

die zu sep='\s+' äquivalent ist, und ist ein wenig mehr verallgemeinert, mit Vorsicht zu verwenden. Wenn Ihre Spalten weiße Flecken haben, sollte dies automatisch geschehen.


Wie @Vaishali erwähnt, gibt es eine alternative Funktion pd.read_table, die für die Breite TSV-Dateien und arbeitet mit den gleichen Argumenten, die Sie read_csv geben nützlich ist -

df = pd.read_table('uni.csv', header=None, names=[...]) 
0

Sieht aus wie tabulatorgetrennte Daten. Versuchen sep='\t'

data = pd.read_csv('uni.csv', sep='\t', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low']) 
Verwandte Themen