Я добавил данные в список из фрейма данных pandas и не могу использовать на нем понимание списка? - PullRequest
0 голосов
/ 03 сентября 2018
import pandas as pd
data = {'Sl No':[1,2,3,4,5,6,7,8,9,10],'Content':['abcd','efhg','acsd','drtsf','dfthsrfv','ftyjdrtg','dthrsgae','awefawef','thr','hdthrt']}
dataframe = pd.DataFrame(data)
all_data =[]
all_data.append(dataframe.Content.values)

Теперь, если я пытаюсь добавить понимание списка, как показано ниже, я получаю ошибку.

txt_1 = " ".join(v for v in all_data if v not in string.punctuation).lower()

Ошибка типа: для 'in' в качестве левого операнда требуется строка, а не numpy.ndarray

Может ли кто-нибудь объяснить, как преодолеть это, кроме как использовать команду .extend ()?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Есть несколько способов подойти к этому. Поскольку all_data является списком, содержащим массив строк, вам необходимо получить доступ к массиву (ам), а не all_data.

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

txt_1 = " ".join(s for v in all_data for s in v if s not in string.punctuation).lower()

С другой стороны, если вы просто хотите получить значения из dataframe['Content'], у вас есть два варианта:

txt_2 = " ".join(v for v in all_data[0] if v not in string.punctuation).lower()
txt_3 = " ".join(v for v in dataframe.Content if v not in string.punctuation).lower()

Вариант 2, в частности, относится к массиву, хранящемуся в all_data в позиции 0, тогда как вариант 3 обходит необходимость в списке, напрямую обращаясь к dataframe['Content'].

0 голосов
/ 03 сентября 2018

Посмотрите на all_data:

In [679]: all_data
Out[679]: 
[array(['abcd', 'efhg', 'acsd', 'drtsf', 'dfthsrfv', 'ftyjdrtg',
        'dthrsgae', 'awefawef', 'thr', 'hdthrt'], dtype=object)]

Это список, содержащий один массив. Это означает, что v в вашем понимании будет этим массивом, а не одним из слов в массиве.

extend вместо append распаковывает массив при добавлении его в список.

Другой вариант - добавить слой для выбора массива из списка, а затем выполнить цикл, for v in all_data[0].

Ваше понимание списка не сработало бы, если бы вы appended также добавили список слов в список.

...