从dict制作熊猫数据框

时间:2019-03-21 16:41:09

标签: python pandas dataframe dictionary data-science

我正在做一项任务,我以政党为重点,以政党成员的性别为项目,做出了一项命令。

该字典的名称为: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 个答案:

答案 0 :(得分:1)

您可以使用list.count(element)函数和python字典理解功能来首先创建gender_counts字典,该字典具有所需的数据,然后使用df.from_dict将其转换为数据帧< / p>

#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

答案 1 :(得分:1)

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)