2016-06-08 10 views
2

Ich arbeite mit Message Board Beiträge (in CSV Dateien enthalten), versuchen, Daten/etc, vor dem Training Klassifikationsmodelle zu reinigen.Python Pandas CSV Import/Unicode Probleme

Dinge gehen gut waren, bis ich:

TypeError: 'float' object is not iterable

als Reaktion auf die Linie:

letters_only = ''.join([i for i in textToProcess if not i.isdigit()]) 

Wo textToProcess von (train["text"][i]) kommt.

Also ... wenn ich dachte, meine Daten zu überprüfen, indem sie Anrufe an:

print train.isnull().sum() 
print test.isnull().sum() 

Ich habe die folgende Ausgabe:

id   0 
category 0 
title  0 
text  1 
train  26 
dtype:  int64 
id   5512 
category 5512 
title  5512 
text  5512 
train  5512 
dtype: int64 

Frage: Also ich nehme dies zu meinen, dass in der Testmenge 5512 Nullwerte in jeder Spalte vorhanden sind?

Das wäre seltsam, da sich die Importe usw. bis zu diesem Punkt größtenteils wie erwartet verhalten haben. Zum Beispiel können Anrufe an z.B. train["text"][0] erzeugte die erwartete Ausgabe (nämlich Text).

Falls es hilft, meine ursprüngliche read_csv Import Anrufe sah aus wie:

train = pd.read_csv(full_train_filename, header=0, encoding = 'utf-8') 

test = pd.read_csv(full_test_filename, header=0, encoding = 'utf-8')` 

Ich bin nicht sicher, da eine einzelne direkte Frage ist hier, aber ich bin der Hoffnung, dass jemand etwas sieht ich falsch gemacht habe.

Alle Gedanken würden sehr geschätzt werden.

+0

Ist möglich, teilen Sie Ihre 'csv's wenn nicht vertraulich? – jezrael

+0

Leider halte ich das für vertraulich. Alles, wonach du suchen würdest? Ich kann einen Blick darauf werfen und darüber berichten. – JHarris

+0

Ja. Standard ist ",", aus pandas docs: – JHarris

Antwort

1

Ich denke, Sie müssen überprüfen NaN Werte in Ihrem DataFrame, die von csv erstellt wird. Sie können isnull mit any und boolean indexing verwenden:

test[test.isnull().any(1)] 

Probe:

import pandas as pd 
import numpy as np 

test = pd.DataFrame({'a': {0: 'r', 1: 'r', 2: 't', 3: 'y'}, 
        'b': {0: 'a', 1: 'a', 2: 's', 3: 'g'}, 
        'c': {0: 7.0, 1: 5.0, 2: np.nan, 3: 4.0}}) 
print (test) 
    a b c 
0 r a 7.0 
1 r a 5.0 
2 t s NaN 
3 y g 4.0 

print (test[test.isnull().any(1)]) 
    a b c 
2 t s NaN 

Dann können Sie einen Text-Editor verwenden, zum Beispiel Notepad++ und überprüfen Sie diese problematischen Zeilen.

+0

Das Problem bestand darin, dass viele (nachgestellte) leere Zeilen im Testdatensatz vorhanden waren. Dies war der Grund für den Aufruf, test.isnull() .sum() mit einer so großen Zahl zu drucken. Also entfernte ich diese Trailing-Werte manuell mithilfe von notepad und verwendete train = train.dropna() und test = test.dropna(), um den Rest der fehlenden Werte zu entfernen. Dies scheint zu funktionieren. Nun zum spannenden Teil - Datenanalyse! Danke nochmal für deine Hilfe! – JHarris

+0

Froh kann dir helfen. Schöner Tag! – jezrael