我想创建多个与一列中的值相同名称的数据框。我希望这段代码像这样工作:
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]
答案 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
-应该如何知道是什么继续吗?