У меня есть рамка данных pandas, в которой есть столбец с некоторым текстом. Я хочу изменить dataframe таким образом, что есть столбец для каждого отдельного слова, которое встречается во всех строках, и логическое значение, указывающее, происходит ли это слово в этом значении конкретной строки в моем текстовом столбце.Что такое эффективная структура данных для токенизированных данных в Python?
У меня есть некоторый код, чтобы сделать это:
from pandas import *
a = read_table('file.tsv', sep='\t', index_col=False)
b = DataFrame(a['text'].str.split().tolist()).stack().value_counts()
for i in b.index:
a[i] = Series(numpy.zeros(len(a.index)))
for i in b.index:
for j in a.index:
if i in str.split(a['text'][j]:
a[i][j] = 1
Однако мой набор данных очень большой (200000 строк и около 70 000 уникальных слов). Есть ли более эффективный способ сделать это, чтобы не уничтожить мой компьютер?
Спасибо, это звучит, как это то, что я хочу. Один из вопросов, однако, заключается в том, что мне по-прежнему нужен еще один столбец в фрейме данных, который содержит «метки» (я действительно намереваюсь передать это в регрессию). Есть ли способ иметь эту разреженную матрицу, но все же присоединить ее к ярлыкам, чтобы я мог легко ее комбинировать с алгоритмом Sklearn ML? – araspion
На самом деле, неважно - я вижу, это не имеет значения, поскольку вы обычно проходите X и y в виде отдельных объектов, не так ли? – araspion
да, это так. См. Edit – JAB