2016-01-11 5 views
1

Я столкнулся с этой ошибкой атрибута, и я застрял в том, как обрабатывать значения float, если они появляются в чириканье. Потоковое твит должно быть одинарным и обозначенным поэтому я использовал функцию split.AttributeError: объект 'float' не имеет атрибута 'lower'

Может кто-нибудь, пожалуйста, помогите мне разобраться с ним, любым обходным решением или решением ..?

Вот ошибка который м .... получаешь

AttributeError       Traceback (most recent call last) 
<ipython-input-28-fa278f6c3171> in <module>() 
     1 stop_words = [] 
----> 2 negfeats = [(word_feats(x for x in p_test.SentimentText[f].lower().split() if x not in stop_words), 'neg') for f in l] 
     3 posfeats = [(word_feats(x for x in p_test.SentimentText[f].lower().split() if x not in stop_words), 'pos') for f in p] 
     4 
     5 trainfeats = negfeats+ posfeats 

AttributeError: 'float' object has no attribute 'lower' 

Вот мой код

p_test = pd.read_csv('TrainSA.csv') 

stop_words = [ ] 

def word_feats(words): 

    return dict([(word, True) for word in words]) 


l = [ ] 

for f in range(len(p_test)): 

    if p_test.Sentiment[f] == 0: 

     l.append(f) 



p = [ ] 

for f in range(len(p_test)): 

    if p_test.Sentiment[f] == 1: 

     p.append(f) 




negfeats = [(word_feats(x for x in p_test.SentimentText[f].lower().split() if x not in stop_words), 'neg') for f in l] 

posfeats = [(word_feats(x for x in p_test.SentimentText[f].lower().split() if x not in stop_words), 'pos') for f in p] 


trainfeats = negfeats+ posfeats 

print len(trainfeats) 


import random 

random.shuffle(trainfeats) 

print(len(trainfeats)) 




p_train = pd.read_csv('TrainSA.csv') 


l_t = [] 

for f in range(len(p_train)): 

    if p_train.Sentiment[f] == 0: 

     l_t.append(f) 


p_t = [] 

for f in range(len(p_train)): 

    if p_train.Sentiment[f] == 1: 

     p_t.append(f)   

print len(l_t) 

print len(p_t) 

Я пробовал много способов, но до сих пор не могу заставить их использовать более низкую и раздельную функцию.

+2

Очевидно, что 'p_test.SentimentText [f]' - число с плавающей запятой, а не строка. Вы не можете называть 'lower()' на float. – Kevin

+0

Обычно это помогает включать фактический текст ошибки с трассировкой, а не просто упоминать об этом - иначе люди должны угадать, откуда эта ошибка могла возникнуть. – Lav

ответ

3

У меня возникает ощущение, что ваши проблемы имеют свой корень в функции pd.read_csv ('TrainSA.csv'). Хотя вы не отправляли эту рутину, я предполагаю, что это Pandas read_csv. Эта процедура интеллектуально преобразует входные данные в типы данных python. Однако это означает, что в вашем случае некоторые значения могут быть переведены на float. Вы можете предотвратить это интеллектуальное (?) Поведение, указав, какие типы данных вы ожидаете для каждого столбца.

3

Спасибо @ Dick Kniep ... да, это pandas csv reader. ваш код предложение worked.Following работал для меня, указав поле тип данных ...

p_test = pd.read_csv('TrainSA.csv') 
p_test.SentimentText=p_test.SentimentText.astype(str) 
0

я получил подобную ошибку с моим набором данных. Параметр настройки dtype не помог мне. Я должен подготовить свой набор данных. Проблема заключалась в значении столбца NaN. Dataset часть:

Id,Category,Text 
1,contract,"Some text with commas , and other " 
2,contract, 

Так что мое решение: перед тем read_csv я подготовил добавить фиктивный текст вместо пустой строки:

Id,Category,Text 
1,contract,"Some text with commas , and other " 
2,contract,"NaN" 

Теперь мое приложение работает отлично.