pd.DataFrame.from_dict () не дает ожидаемого результата - PullRequest
0 голосов
/ 22 января 2019

Я новичок в программировании на Python.Я хочу получить количество слов для каждого слова в этом наборе данных Википедии (people_wiki.csv).Я могу получить каждое слово и его вхождение в виде словаря, но не могу разбить пару ключ-значение словаря на отдельные столбцы.Я пробовал несколько методов (from_dict, from_records, to_frame, pivot_table и т. Д.) Это что-то выполнимое в Python.Я буду признателен за любую помощь.

Набор данных Samle:

URI                                           name             text

<http://dbpedia.org/resource/George_Clooney>  George Clooney   'george timothy clooney born may 6 1961 is an american actor writer producer director and activist he has received three golden globe awards for his work as an actor and two academy awards one for acting and the other for producingclooney made his...'

Я пытался:

clooney_word_count_table = pd.DataFrame.from_dict(clooney['word_count'], orient='index', columns=['word','count']

Я также пытался:

clooney['word_count'].to_frame()

Это мой код:

people = pd.read_csv("people_wiki.csv")
clooney = people[people['name'] == 'George Clooney']

from collections import Counter
clooney['word_count']= clooney['text'].apply(lambda x: Counter(x.split(' ')))

clooney_word_count_table = pd.DataFrame.from_dict(clooney['word_count'], orient='index', columns=['word','count']
clooney _word_count_table

Вывод:

       word_count
35817   {'george': 1, 'timothy': 1, 'clooney': 9, 'ii': ...

Я ожидаю получить выходной кадр данных с 2 столбцами из clooney_word_count_table:

word      count
normalize  1
george     3
combat     1
producer   2

1 Ответ

0 голосов
/ 22 января 2019

Проблема в том, что clooney - это DataFrame (содержащий одну строку с индексом 35817), поэтому clooney['word_count'] - это Серия , содержащая одно значение (ваш словарь подсчета) с индексом 35817.

DataFrame.from_dict затем рассматривает эту серию как эквивалентную {35817: {'george': 1,...}, что дает вам запутанный результат.

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

from collections import Counter
import pandas as pd

# Load the wikipedia entries and select the ones we care about
people = pd.read_csv("people_wiki.csv")
people_to_process = people[people['name'] == 'George Clooney']

# Compute the counts for these entries
counts = Counter()
people_to_process['text'].apply(lambda text: counts.update(text.split(' ')))

# Transform the counter into a DataFrame
count_table = pd.DataFrame.from_dict(counts, orient='index', columns=['count'])
count_table
...