#python #dataframe #dataset
#python #dataframe #набор данных
Вопрос:
Есть этот набор данных, который я собираюсь построить (его можно получить здесь https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016 ). Я хотел отобразить suicides_no для мужчин и женщин 25-34 лет в Российской Федерации с 2000 по 2015 год. Поэтому я создаю для этого новый фрейм данных.
Вот основной фрейм данных.
DF = pd.read_csv("D:/who_suicide_statistics.csv")
Вот мой код для создания нового фрейма данных.
DF1 = (DF.loc[(DF["country"] == "Russian Federation") amp; (DF["age"] == "25-34 years")
amp; (DF["sex"] == "male") amp; (DF["year"] >= 2000)])
DF2 = (DF.loc[(DF["country"] == "Russian Federation") amp; (DF["age"] == "25-34 years")
amp; (DF["sex"] == "female") amp; (DF["year"] >= 2000)])
year_sex_suicides = {}
year_sex_suicides["year"] = DF1["year"]
year_sex_suicides["male_suicides"] = DF1["suicides_no"]
year_sex_suicides["female_suicides"] = DF2["suicides_no"]
DF333 = pd.DataFrame(data=year_sex_suicides)
И вот код для графика, который я хотел.
DF333.plot(kind="line", x="year", y=["male suicides", "female_suicides"])
График, который я придумал, таков
Что-то не так, но я не смог это найти.
Ответ №1:
Вероятно, у вас есть довольно много NaN
данных в наборе данных, который вы пытаетесь построить (посмотрите на свой фрейм данных, например, оценив print(DF333)
).
Вы могли бы либо заполнить их, используя что-то вроде (хотя это не очень хороший способ!):
DF333.fillna(method='ffill', inplace=True)
Или сбросьте индекс при построении вашего фрейма данных:
DF1 = (DF.loc[(DF["country"] == "Russian Federation") amp; (DF["age"] == "25-34 years")
amp; (DF["sex"] == "male") amp; (DF["year"] >= 2000)])
DF1 = DF1.set_index('year')
DF2 = (DF.loc[(DF["country"] == "Russian Federation") amp; (DF["age"] == "25-34 years")
amp; (DF["sex"] == "female") amp; (DF["year"] >= 2000)])
DF2 = DF2.set_index('year')
year_sex_suicides = {}
year_sex_suicides["male_suicides"] = DF1["suicides_no"]
year_sex_suicides["female_suicides"] = DF2["suicides_no"]
DF333 = pd.DataFrame(data=year_sex_suicides)
DF333.plot(kind="line", y=["male_suicides", "female_suicides"])
Таким образом, вы гарантируете, что все помещено в строку, соответствующую году, а не индексу строки из исходного файла CSV. Конечно, вы также могли бы использовать что-то вроде groupby от Panda’s, что также уменьшит количество строк кода (но, возможно, вам понадобится DF1
и т.д. Позже для других целей):
DF1 = DF.loc[(DF["country"] == "Russian Federation") amp; (DF["age"] == "25-34 years")
amp; (DF["year"] >= 2000)]
DF1.groupby(['year', 'sex']).sum()['suicides_no'].groupby('sex').plot()