2015-11-13 5 views
1

У меня есть набор данных, импортированный как 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», чтобы иметь количество слов в названии страницы (слова разделяются «_»)ТипError: объект типа 'float' не имеет len() & TypeError: объект 'float' не итерируется

Вот мои коды:

Для разделения на слова:

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

Я проверил тип Ь список типа и LEN (б) . значение Один образца:

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» для подсчета элементов списка в каждой строке столбца «слова». (Придется использовать цикл, чтобы прикоснуться к элементам списка в каждой строке)

Но у меня были ошибки:

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 
... 

Но с = Len (х) = 68516, гораздо меньше, чем 6 миллионов.

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

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 

Я думаю, что я это тип списка и итерацию ...

Опять же, если я не добавить, но только печать, он работал:

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"])) 

Похоже есть некоторые аномальные список. Но я не знаю, что это такое или как его найти.

Кто-нибудь может помочь?

ответ

2

Вы ошибаетесь. Ошибки, которые вы видите, делают его 100% ясным, что b является итерабельным, содержащим хотя бы один float (независимо от того, являются ли остальные элементы str или нет, я не буду спекулировать).

Try делает:

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) 
+1

Благодарим за помощь. Это было связано с нулевыми значениями в столбце «Page_value». Несмотря на то, что я передал весь элемент в строку, null будет по-прежнему плавать. –

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