Создание панда данных из DICT - PullRequest
0 голосов
/ 21 марта 2019

Я работаю над заданием, в котором я сделал диктат с Политическими партиями в качестве ключей и полами членов политических партий в качестве пунктов.

Диктант назван: genderlist.код для моей команды следующий:

soup = BeautifulSoup(open(loadKandidatenlijst()).read(), features="xml")

genderlist = {}

for affiliation in soup.findAll('Affiliation'):
    genders = []
    party = affiliation.RegisteredName.text
    genderlist[party] = 0
    for name in affiliation.findAll('Candidate'):
        gender = name.Gender.text
        genders.append(gender)
        genderlist[party] = genders

genderlist['Partij van de Arbeid (P.v.d.A.)'][:6], len(genderlist), len(genderlist['CDA'])

Мой вывод приводит к: (['male', 'female', 'male', 'female', 'male', 'female'], 24, 50)

Итак, когда я вставляю имя участника, это приводит к полу всех членов партии.

Теперь мне нужно создать фрейм данных, подобный следующему: enter image description here

Так, где он отдельно подсчитывает пол и возвращает процент женского в фрейме данных.

Я уже пробовал это:

pd.DataFrame(genderlist.items(),columns=['male', 'female'])

Это приводит к: enter image description here

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

Не могли бы вы мне помочь, что теперь можно делать с моим кодом.

Спасибо заранее

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Пусть df будет вашим текущим выводом (я изменил имена столбцов):

df = pd.DataFrame(genderlist.items(), columns=['party_name', 'gender_list'])

gender_list теперь является столбцом списков в этом формате:

['male', 'female', 'male', 'female', 'male', 'female']

Теперь вы можете просто применить уникальное количество элементов, используя Counter, который возвращает словарь, а затем используйте apply(pd.Series), чтобы разбить столбец словарей на отдельные столбцы.

from collections import Counter
df['gender_list'].apply(Counter).apply(pd.Series)
1 голос
/ 21 марта 2019

Вы можете использовать функцию list.count(element) вместе с пониманием словаря Python, чтобы сначала создать словарь gender_counts, в котором есть необходимые данные, а затем использовать df.from_dict для преобразования этого в фрейм данных

#each list has gender of members of that party
party_A
['female', 'female', 'male', 'female', 'male', 'male', 'female', 'female',
 'female', 'female']

gender_dict = {'Party_A': party_A, 'Party_B': party_B, 
               'Party_C': party_C, 'Party_D': party_D}

gender_counts = {k: [v.count('male'), v.count('female')] for k, v in gender_dict.items()}

gender_counts
{'Party_A': [3, 7],
 'Party_B': [5, 9],
 'Party_C': [13, 7],
 'Party_D': [9, 6]}

df = pd.DataFrame.from_dict(gender_counts, orient='index', columns=['male', 'female'])

df
     male female 
Party_A 3   7   
Party_B 5   9   
Party_C 13  7   
Party_D 9   6   


df['Women_pecentage'] = df.female/(df.male+df.female)

df.round(2)

     male female Women_Percentage
Party_A 3   7   0.70
Party_B 5   9   0.64
Party_C 13  7   0.35
Party_D 9   6   0.40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...