使用jupyter笔记本练习一些数据分析,我的return语句改变了我的字典顺序

问题描述 投票:0回答:2

我的代码:

def chickenpox_by_sex():

    import numpy as np
    import pandas as pd

    df = pd.read_csv("NISPUF17.csv")

    male_1dose_nopox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 1) & 
                       (df['SEX'] == 1)]
    female_1dose_nopox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 1) & (df['SEX'] == 2)]
    male_1dose_pox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 2) & (df['SEX'] == 1)]
    female_1dose_pox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 2) & (df['SEX'] == 2)]

    ratio_male = male_1dose_nopox.shape[0]/male_1dose_pox.shape[0]
    ratio_female = female_1dose_nopox.shape[0]/female_1dose_pox.shape[0]

    ratio = [ratio_male, ratio_female]
    sex = ['male', 'female']

    di = {}

    di['male'] = ratio[0]
    di['female'] = ratio[1]

    print(di)
    return di

当我调用该函数时:

我的打印语句输出以下内容:

{'male': 0.009675583380762664, 'female': 0.0077918259335489565}

我的返回语句返回以下内容:

{'female': 0.0077918259335489565, 'male': 0.009675583380762664}

我不知道为什么会这样做,我也不会太在意,但在这种情况下我需要返回声明将男性放在第一位。 我到处搜索但找不到这个问题的答案。 请帮帮我!

python pandas dictionary jupyter-notebook jupyter
2个回答
1
投票

Python 中的字典是无序的。您可以使用第 3 方库 Sortedcontainers 中的 SortedDict。或者您可以使用元组列表而不是字典。


0
投票

这是我的代码,如果有帮助的话 def 鸡痘_按_性别(): # 这里是你的代码 将 pandas 导入为 pd

df = pd.read_csv('NISPUF17.csv')  #loading the file into varibale

df = pd.read_csv('NISPUF17.csv', index_col=0)
df = df[["SEX", "HAD_CPOX", "P_NUMVRC"]].dropna() #loading three columns from data set into df varibel
df = df[df["P_NUMVRC"] > 0]   # loading those columns from data set where avccination is done atleast once

male_df = df[df["SEX"] == 1]  # loading all the observation of males 
female_df = df[df["SEX"] == 2]  # if ==2 then its female, loading all females from data set

resultant_dict={} #creatinhg an empty dictionary for storing resultant

# loading those females data  who have contracted chicken pox (==1 , means contracted) and were vaccinated at least one time.
# if both conditions are satisfied, then it will store the  into variable
female_chickenpox = female_df[(female_df["HAD_CPOX"] == 1) & (female_df["P_NUMVRC"] >= 1)]

# if the female  is not contracted but she has vaccined once or more than that then it will store imto the non-chicken pox
# variable
female_non_chickenpox = female_df[(female_df["HAD_CPOX"] == 2) & (female_df["P_NUMVRC"] >= 1)]
 
#doing the same for males
male_chickenpox = male_df[(male_df["HAD_CPOX"] == 1) & (male_df["P_NUMVRC"] >= 1)]
male_non_chickenpox = male_df[(female_df["HAD_CPOX"] == 2) & (male_df["P_NUMVRC"] >= 1)]  

#now calculating ratio for those who were vaccinated but still contracted

female_ratio = len(female_df[female_df["HAD_CPOX"] == 1])/len(female_df[female_df["HAD_CPOX"] == 2])
male_ratio = len(male_df[male_df["HAD_CPOX"] == 1])/len(male_df[male_df["HAD_CPOX"] == 2])

#assigining the results of ratios to dictionery

resultant_dict["male"]=male_ratio
resultant_dict["female"]=female_ratio  

return resultant_dict

引发 NotImplementedError()

chickenpox_by_sex() #调用函数

© www.soinside.com 2019 - 2024. All rights reserved.