Вывод None вместо значений - PullRequest
0 голосов
/ 15 мая 2019

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

Таким образом, если текст «инженер-электрик», он должен вывести 19 и т. Д. Вместо этого он просто заполняет список значениями None

Я написал список понимания ниже

all_text_length = [all_text_length.append(len(i)) for i in data['all_text']]

Ожидается вывод целого числа, но его нет

В качестве обходного пути я в настоящее время использую (успешно)

[all_text_length.append(len(i)) for i in data['all_text']]```

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Вы пытаетесь добавить к тому же списку, в котором вы делаете список понимания. Поскольку append возвращает тип None, вы получаете None. Следующий код должен работать,

all_text_length = map(len, data['all_text'])

map - это функция, которая принимает другую функцию (первый аргумент) и применяет ее к каждому элементу итерируемого (второй аргумент) и возвращает список результатов.

1 голос
/ 15 мая 2019

Значение перед оператором "for" в понимании списка будет добавлено в список. Если вы разместите там заявление, например

all_text_length.append (LEN (я)

, будет добавлено значение return этой функции. Поскольку .append () не содержит return -statement, вы получите значение None как return type, которое будет добавлено в ваш список.

Используйте рекомендуемый код @Prune, и он должен работать так, как вы хотите.

1 голос
/ 15 мая 2019

Прочитайте документацию по append: она работает на месте. Там нет возвращаемого значения. То, что вы написали, по сути

all_text_length = [None for i in data['all_text']]

Похоже, вы пытаетесь составить список, чтобы полностью изменить свой список. Попробуйте это:

all_text_length = [len(i) for i in data['all_text']]

Если вам просто нужны длины в удобной форме, нужно ли создавать новый столбец? Просто примените len к столбцу df.

...