熊猫在循环中设置数据帧的名称

时间:2018-07-31 18:38:39

标签: python pandas dataframe foreach

我想创建多个与一列中的值相同名称的数据框。我希望这段代码像这样工作:

import pandas as pd

data=pd.read_csv('athlete_events.csv')


Sports = data.Sport.unique()

for S in Sports:
    name=str(S)
    name=data.loc[data['Sport']==S]

2 个答案:

答案 0 :(得分:4)

使用字典来组织数据框,然后groupby对其进行拆分。您可以通过dict理解遍历groupby对象。

示例:

>>> data
      Sport  random_data
0    soccer            0
1    soccer            3
2  football            1
3  football            1
4    soccer            4

frames = {i:dat for i, dat in data.groupby('Sport')}

然后,您可以像访问任何其他字典值一样访问框架:

>>> frames['soccer']
    Sport  random_data
0  soccer            0
1  soccer            3
4  soccer            4

>>> frames['football']
      Sport  random_data
2  football            1
3  football            1

答案 1 :(得分:0)

您可以通过修改globals()来做到这一点,但这并不明智。

for S in Sports:
    globals()[str(S)] = data.loc[data['Sport']==S]    

下面是一个独立的示例:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'sport':['football', 'football', 'tennis'],
                           'value':[1, 2, 3]})

In [3]: df
Out[3]: 
      sport  value
0  football      1
1  football      2
2    tennis      3

In [4]: for name in df.sport.unique():
    ...:     globals()[name] = df.loc[df.sport == name]
    ...:     

In [4]: football
Out[4]: 
      sport  value
0  football      1
1  football      2

虽然这是对您问题的直接答案,但我建议使用sacul的答案,字典是为此目的(即存储键和值)而通过globals()插入的变量名通常不是一个好主意。

想象一下将来有其他人或您自己阅读代码-突然您像以前从未明确定义的football一样使用pd.DataFrame-应该如何知道是什么继续吗?