Создание кадра данных из данных, хранящихся в текстовом файле в Python - PullRequest
0 голосов
/ 30 октября 2018

У меня есть информация из задания mapreduce, которая хранится в текстовом файле и имеет следующий вид:

Book Title:Token   Count
Book1:Word1   5
Book2:Word1   6
Book1:Word2   2

Я пытаюсь преобразовать это в фрейм данных, который выглядит следующим образом, в котором будут перечислены все уникальные слова в первом столбце, а затем указано, сколько раз каждое слово встречается в каждом соответствующем документе в смежных столбцах:

Table

Пока у меня есть следующий код, чтобы отделить "Название книги", "Токен" и "Количество" от каждой строки текстового файла

for line in unigrams:
    token, count = line.strip().split("\t")
    document = token.split(":")[0]
    word = token.split(":")[1]
    x[i] = {'Document': document, 'Word' : word.strip(), 'Count' : count.strip()}

Словарь установлен вне цикла for, а i увеличивается в нижней части. Затем я преобразую словарь 'x' в кадр данных со следующей строкой

df = pd.DataFrame.from_dict(x, orient="index")

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

1 Ответ

0 голосов
/ 30 октября 2018

Pandas предлагает удобные сводные таблицы для вашего случая использования.

import pandas as pd

x = [{"Document": "Doc 1", "Word": "Word 1", "Count": 3},
    {"Document": "Doc 2", "Word": "Word 2", "Count": 1},
    {"Document": "Doc 3", "Word": "Word 3", "Count": 2},
    {"Document": "Doc 3", "Word": "Word 1", "Count": 6},
    {"Document": "Doc 1", "Word": "Word 2", "Count": 1},
    {"Document": "Doc 2", "Word": "Word 3", "Count": 7}]

df = pd.DataFrame(x)
df = df.groupby(["Word", "Document"]).sum().reset_index()
df.pivot(index="Word", columns="Document")

Это дает дополнительное преимущество использования значений Document и Word в качестве индексов для быстрого доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...