TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代

Posted

技术标签:

【中文标题】TypeError: \'float\' 类型的对象没有 len() & TypeError: \'float\' 对象不可迭代【英文标题】:TypeError: object of type 'float' has no len() & TypeError: 'float' object is not iterableTypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代 【发布时间】:2016-02-15 11:37:39 【问题描述】:

我有一个导入为 DataFrame“new_data_words”的数据集。有一列“page_name”包含杂乱的网页名称,例如“%D8%AA%D8%B5%D9%86%D9%8A%D9%81:%D8%A2%D9%84%D9...”、“%D9%85%D9%84%D9%81:IT-Airforce-OR2.png”或简单的“1950”。我想创建一个新列“word_count”来统计页面名称中的字数(字数由“_”分隔)

这是我的代码:

拆分成单词:

b = list(new_data_words['page_name'].str.split('_'))
new_data_words['words'] = b

我检查了 b 的类型是 list 类型,len(b) 是 6035980。 一个样本值:

In [1]: new_data_words.loc[0,'words']
Out[2]: ['%D8%AA%D8%B5%D9%86%D9%8A%D9%81:%D8%A2%D9%84%D9%87%D8%A9',
         '%D8%A8%D9%84%D8%A7%D8%AF',
         '%D8%A7%D9%84%D8%B1%D8%A7%D9%81%D8%AF%D9%8A%D9%86']

我创建了另一列“word_count”来计算“words”列的每一行中列表的元素。 (必须使用循环来触摸每行中列表的元素)

但我有错误:

x = []
i = []
c = 0
for i in b:    # i is list type, with elements are string, I checked
    c=c+1
    x.append(len(i))

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-c0cf0cfbc458> in <module>()
      6         #y = str(y)
      7     c=c+1
----> 8     x.append(len(i))

TypeError: object of type 'float' has no len()

不知道为什么是浮点型.....

但是,如果我只添加一个打印,它会起作用

x = []
i = []
c = 0
for i in b:
    c=c+1
    print len(i)
    x.append(len(i))

3
2
3
2
3
1
8
...

但是 c = len(x) = 68516,远小于 600 万。

我试图再次强制元素为字符串,发生另一个错误:

x = []
for i in b:
    for y in i:
        y = str(y)
    x.append(len(i))


TypeError                                 Traceback (most recent call last)
<ipython-input-164-c86f5f48b80c> in <module>()
      1 x = []
      2 for i in b:
----> 3     for y in i:
      4         y = str(y)
      5     x.append(len(i))
TypeError: 'float' object is not iterable

我认为 i 是列表类型并且是可迭代的...

再一次,如果我没有追加,而只是打印,它会起作用:

x = []
for i in b:
    for y in i:
        y = str(y)
    print (len(i))

另一个例子: 这有效:

a = []
for i in range(10000):
    a.append(len(new_data_words.loc[i,"words"]))

改成动态范围,不行:

a = []
for i in range(len(b)):
    a.append(len(new_data_words.loc[i,"words"]))


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-f9d0af3c448f> in <module>()
      1 a = []
      2 for i in range(len(b)):
----> 3     a.append(len(new_data_words.loc[i,"words"]))

TypeError: object of type 'float' has no len()

这也不行……

a = []
for i in range(6035980):
    a.append(len(new_data_words.loc[i,"words"]))

列表中似乎有一些异常。但我不知道那是什么或如何找到它。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

你错了。您看到的错误 100% 清楚地表明 b 是一个包含至少一个 float 的可迭代对象(其他元素是否为 str 我不会推测)。

尝试做:

for i in b:
    print(type(i), i)

您会看到至少有一个float。或者这样只打印b 的不可迭代组件:

import collections

for i in b:
    if not isinstance(i, collections.Iterable):
        print(type(i), i)

【讨论】:

感谢您的帮助。这是由于“Page_value”列中的空值。即使我将所有元素都转换为字符串,null 仍然是浮动的。

以上是关于TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“numpy.float32”类型的对象没有 len()

pyspark:TypeError:'float'对象不可迭代

TypeError:“numpy.int64”类型的对象没有 len()

TypeError:不支持的操作数类型/:'float'和'datetime.timedelta'

使用范围时“TypeError:'float'对象不能解释为整数”是啥意思?

Scipy hstack 导致“TypeError:类型不支持转换:(dtype('float64'),dtype('O'))”