AttributeError: объект «плавающий» не имеет атрибута «нижний»

Я столкнулся с этой ошибкой атрибута, и я застрял в том, как обрабатывать значения с плавающей запятой, если они появляются в твите. Потоковое твит должно быть в нижнем регистре и токенизировано, поэтому я использовал функцию разделения.

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

Вот ошибка, которую я получаю....

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)

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


person Vishal Kharde    schedule 11.01.2016    source источник
comment
По-видимому, p_test.SentimentText[f] - это число с плавающей запятой, а не строка. Вы не можете вызвать lower() на поплавок.   -  person Kevin    schedule 11.01.2016
comment
Обычно помогает включить фактический текст ошибки с трассировкой, а не просто упоминать ее, иначе людям придется догадываться, откуда могла возникнуть эта ошибка.   -  person Lav    schedule 11.01.2016


Ответы (3)


Спасибо, @Дик Книп. Да, это программа для чтения Pandas CSV. Ваше предложение сработало. Ниже приведен код Python, который работал у меня, указав тип данных поля (в данном случае его строку)

p_test = pd.read_csv('TrainSA.csv')
p_test.SentimentText=p_test.SentimentText.astype(str)
person Vishal Kharde    schedule 11.01.2016
comment
спасибо, это сработало и сэкономило мое время :-) - person saifhassan; 09.12.2020

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

person Dick Kniep    schedule 11.01.2016

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

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"

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

person feeeper    schedule 19.05.2017