AttributeError: 'float' 对象没有属性 'lower'

Posted

技术标签:

【中文标题】AttributeError: \'float\' 对象没有属性 \'lower\'【英文标题】:AttributeError: 'float' object has no attribute 'lower'AttributeError: 'float' 对象没有属性 'lower' 【发布时间】:2016-04-15 22:07:42 【问题描述】:

我正面临这个属性错误,如果浮动值出现在推文中,我会被困在如何处理它们。流式推文必须小写和标记化,所以我使用了拆分功能。

有人可以帮我处理它,任何解决方法或解决方案..?

这是我遇到的错误......

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)

我尝试了很多方法,但仍然无法让他们使用 lower 和 split 功能。

【问题讨论】:

显然p_test.SentimentText[f] 是一个浮点数,而不是一个字符串。你不能在浮点数上调用lower() 它通常有助于在回溯中包含实际的错误文本,而不是仅仅提及它 - 否则人们不得不猜测错误可能源自何处。 【参考方案1】:

谢谢@Dick Kniep。是的,它是 Pandas CSV 阅读器。你的建议奏效了。 以下是通过指定字段数据类型为我工作的 python 代码, (在这种情况下,它的字符串)

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

【讨论】:

【参考方案2】:

我感觉您的问题根源于 pd.read_csv('TrainSA.csv') 函数。尽管您没有发布此例程,但我认为它是 Pandas read_csv。该例程智能地将输入转换为 python 数据类型。但是,这意味着在您的情况下,某些值可以转换为浮点数。您可以通过指定每列期望的数据类型来防止这种智能 (?) 行为。

【讨论】:

【参考方案3】:

我的数据集出现了类似的错误。设置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"

现在我的应用可以正常工作了。

【讨论】:

【参考方案4】:

如果您使用的是数据框,请使用以下方法删除 NA:

df = df.dropna()

【讨论】:

以上是关于AttributeError: 'float' 对象没有属性 'lower'的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 的“where”方法时,“AttributeError:‘float’对象没有属性‘all’”

Celery CRITICAL/MainProcess] 不可恢复的错误:AttributeError("'float' object has no attribute 'items'&qu

AttributeError:“DataFrame”对象没有属性

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas(

错题本

解决方法:opencv读取中文路径图像报错 | AttributeError: ‘NoneType‘ object has no attribute ‘astype‘