我正在研究熊猫的基础知识,并且正在从事一项发现的任务。
我创建了一个列表,其中包含未来熊猫中DataFrame的名称。 那就是列表:
DF_names_by_year = ['year_1985', 'year_1986', 'year_1987', ..., 'year_2010', 'year_2011', 'year_2012', 'year_2013']
我有一个很大的df,其中包含列表中有关每年的信息。现在,我必须制作一个图表以显示每年的一些信息。我想按年份对df进行分组并剪切,然后从名称列表中适当地给每个新的df名称。
如果我输入名称,它将起作用:
year_1985 = pd.DataFrame(teams_wins_salaries.loc[teams_wins_salaries['yearID'] == 1985])
但是如果我将其放入循环中,我实际上会列出一个空的数据帧。
for i in range(len(DF_names_by_year)):
DF_names_by_year[i] = pd.DataFrame(teams_wins_salaries.loc[teams_wins_salaries['yearID'] == i])
[Empty DataFrame
Columns: [yearID, teamID, W, salary]
Index: [], Empty DataFrame
Columns: [yearID, teamID, W, salary]
Index: [], Empty DataFrame
Columns: [yearID, teamID, W, salary]
我的直觉告诉我,应该有一种方法可以分隔df并为每个部分命名。我只想知道是否可以从列表中给他们起名字。
对于解决问题的任何想法,我将不胜感激。
答案 0 :(得分:1)
考虑groupby
,以按所有唯一年份划分数据框架。另外,请考虑使用数据帧的列表或字典,而不是用许多类似结构的对象来填充全局环境。
# LIST COMPREHENSION
year_df_list = [g for i,g in teams_wins_salaries.groupby('yearID')]
# DICTIONARY COMPREHENSION
year_df_dict = {i:g for i,g in teams_wins_salaries.groupby('yearID')}
如果数据框存储在列表或字典中,则不会丢失任何功能。因此,您不必维护30个以上的单独的,独立的,命名的全局项,而是维护一个可以轻松,和谐地遍历,循环,绘制图形的 :
year_df_list[1]·head()
year_df_list[2].describe()
year_df_list[3].shape
year_df_dict['1985']·head()
year_df_dict['1990'].describe()
year_df_dict['1995'].shape