Python 有没有一种方法可以遍历列表并返回以其内容命名的变量?

Python 有没有一种方法可以遍历列表并返回以其内容命名的变量?,python,pandas,Python,Pandas,我有一个按日期组织的熊猫数据框架,我试图按年份(在一个名为“年”的专栏中)进行拆分。我想每年返回一个数据帧,名称类似于“df19XX” 我希望写一个“For”循环来处理这个问题。。。类似于 for d in [1980, 1981, 1982]: df(d) = df[df['year']==d] 。。。它将返回三个数据帧,分别称为df1980、df1981和df1982 谢谢 您可以通过groupby进行迭代: In [11]: df = pd.DataFrame({"date":

我有一个按日期组织的熊猫数据框架,我试图按年份(在一个名为“年”的专栏中)进行拆分。我想每年返回一个数据帧,名称类似于“df19XX”

我希望写一个“For”循环来处理这个问题。。。类似于

for d in [1980, 1981, 1982]:
    df(d) = df[df['year']==d]
。。。它将返回三个数据帧,分别称为df1980、df1981和df1982


谢谢

您可以通过groupby进行迭代:

In [11]: df = pd.DataFrame({"date": pd.date_range("2012-12-28", "2013-01-03"), "A": np.random.rand(7)})

In [12]: df
Out[12]:
          A       date
0  0.434715 2012-12-28
1  0.208877 2012-12-29
2  0.912897 2012-12-30
3  0.226368 2012-12-31
4  0.100489 2013-01-01
5  0.474088 2013-01-02
6  0.348368 2013-01-03

In [13]: g = df.groupby(df.date.dt.year)

In [14]: for k, v in g:
    ...:     print(k)
    ...:     print(v)
    ...:     print()
    ...:
2012
          A       date
0  0.434715 2012-12-28
1  0.208877 2012-12-29
2  0.912897 2012-12-30
3  0.226368 2012-12-31

2013
          A       date
4  0.100489 2013-01-01
5  0.474088 2013-01-02
6  0.348368 2013-01-03

我想强烈地争辩说,最好是简单地让一个dict包含变量,然后在
locals()
字典中乱搞(我声称使用
locals()
所以不是“pythonic”):

尽管你可以考虑在飞行中计算这一点(而不是存储在DICT或变量中)。您可以使用:


像这样的?也使用@Andy的df

variables = locals()
for i in [2012, 2013]:
    variables["df{0}".format(i)]=df.loc[df.date.dt.year==i]
df2012
Out[118]: 
          A       date
0  0.881468 2012-12-28
1  0.237672 2012-12-29
2  0.992287 2012-12-30
3  0.194288 2012-12-31
df2013
Out[119]: 
          A       date
4  0.151854 2013-01-01
5  0.855312 2013-01-02
6  0.534075 2013-01-03

我只想提一下,你可以迭代
g
{k:grp for k,grp in g}
Ha,@piRSquared有这个答案并删除了它(很快你就可以看到删除的答案:p),我的评论搞乱了
locals(),我想说的是,你实际上并不想把这些作为变量——一个dict会更好。@AndyHayden得到了你~:-)谢谢你的解释,will下次会用你的方式……我想有一个参考,这在某种程度上有助于:我猜这也是“将来我应该禁止使用本地人吗”是的,我想是的P
In [15]: g.get_group(2012)
Out[15]:
          A       date
0  0.865239 2012-12-28
1  0.019071 2012-12-29
2  0.362088 2012-12-30
3  0.031861 2012-12-31
variables = locals()
for i in [2012, 2013]:
    variables["df{0}".format(i)]=df.loc[df.date.dt.year==i]
df2012
Out[118]: 
          A       date
0  0.881468 2012-12-28
1  0.237672 2012-12-29
2  0.992287 2012-12-30
3  0.194288 2012-12-31
df2013
Out[119]: 
          A       date
4  0.151854 2013-01-01
5  0.855312 2013-01-02
6  0.534075 2013-01-03