Python 有没有一种方法可以遍历列表并返回以其内容命名的变量?
我有一个按日期组织的熊猫数据框架,我试图按年份(在一个名为“年”的专栏中)进行拆分。我想每年返回一个数据帧,名称类似于“df19XX” 我希望写一个“For”循环来处理这个问题。。。类似于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":
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