2016-06-08 2 views
2

Я работаю с сообщениями на доске объявлений (содержится в файлах CSV), пытаясь очистить данные/etc, перед тем, как обучить классификационные модели.Python Pandas CSV import/Unicode woes

Дела шли хорошо, пока я не получил:

TypeError: 'float' object is not iterable

в ответ на линии:

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

Где textToProcess происходит от (train["text"][i]).

Итак ... когда я думал, чтобы проверить мои данные, делая звонки:

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

я получил следующий вывод:

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

Вопрос: Итак, я беру это означает, что в тестовом наборе в каждом столбце есть 5512 нулевых значений?

Это было бы странно, поскольку импорт и т. Д., По-видимому, вел себя так, как ожидалось, по большей части до этого момента. Например, вызовы, например, train["text"][0] произвел ожидаемый результат (а именно текст).

В случае это помогает, мои оригинальные read_csv импортные звонки выглядели как:

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

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

Я не уверен, что есть один прямой вопрос здесь, но я надеюсь, что кто-то видит что-то, что я сделал неправильно.

Любые мысли были бы весьма благодарны.

+0

Возможно ли поделиться своими 'csv' если не уверенными? – jezrael

+0

К сожалению, я считаю, что это считается конфиденциальным. Что-нибудь, в частности, вы бы искали? Я могу заглянуть и отчитаться. – JHarris

+0

Да. По умолчанию это «,», из pandas docs: – JHarris

ответ

1

Я думаю, что вам нужно проверить NaN значения в вашем DataFrame, который создан на основе csv. Вы можете использовать isnull с any и boolean indexing:

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

Пример:

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 

Затем вы можете использовать некоторые текстовый редактор, например, Notepad++ и проверьте эти проблемные строки.

+0

Проблема заключалась в том, что в наборе тестовых данных было много (конечных) пустых строк. Это и послужило причиной вызова print.isnull(). Sum(), возвращающего такое большое число. Поэтому я вручную удалял эти конечные значения с помощью блокнота и использовал train = train.dropna() и test = test.dropna(), чтобы удалить оставшиеся недостающие значения. Кажется, это сработало. Теперь на интересную часть - анализ данных! В очередной раз благодарим за помощь! – JHarris

+0

Рад может вам помочь. Приятный день! – jezrael

Смежные вопросы