遍历使用“ locals”生成的几个数据框:Python

时间:2019-01-18 15:18:40

标签: python pandas dataframe

我已经将数据帧“ df”拆分为较小的数据帧df1,df2 ... dfn,以便将具有相同ID(来自“ UNIT-ID”列)的所有记录组合在一起并存储在这些较小的数据帧中。 >

Input:

UNIT-ID Q1  Q2  Q3
110-P1  37  487 0
110-P1  31  140 1
110-P1  46  214 1
110-P2  29  287 1
110-P2  45  131 1
110-P2  39  260 0
110-15  23  346 0
110-15  31  419 1
110-15  37  287 0
110-15  36  228 1
110-15  48  309 1

Output:
df1:        
 UNIT-ID    Q1  Q2  Q3
    110-P1  37  487 0
    110-P1  31  140 1
    110-P1  46  214 1

df2:            
 UNIT-ID    Q1  Q2  Q3
    110-P2  29  287 1
    110-P2  45  131 1
    110-P2  39  260 0

由于@ W-B回答了question,因此我使用了以下代码来实现这一目标。

variables = locals()
for i,j in enumerate(df.groupby('UNIT-ID')):
    variables["df{0}".format(i+1)] = j[1]
df1
Out[13]: 
   UNIT-ID  Q1   Q2  Q3
16  110-15  23  346   0
17  110-15  31  419   1
18  110-15  37  287   0
19  110-15  36  228   1
20  110-15  48  309   1

接下来,我想对每个单独的数据帧运行几个预处理步骤和一个深度学习模型,现在,这些数据标记-df1,df2 .. dfn不会存储在本地驱动器上的任何位置,但是这些已创建,如果选中则可以解决。有没有办法遍历这些数据帧?

一个人可以使用“ dict”将df1,df2 ... dfn分为以下部分,但是使用此选项,我需要将每个df保存在一个物理位置并再次读取它,因为df仍存储在dict中并且必须通过单独调出来提取。有没有办法使用“本地”或任何其他技术来完成此任务?

d={"df{0}".format(i+1):j[1]for i,j in enumerate(df.groupby('UNIT-ID'))}
d['df1']
Out[17]: 
   UNIT-ID  Q1   Q2  Q3
16  110-15  23  346   0
17  110-15  31  419   1
18  110-15  37  287   0
19  110-15  36  228   1
20  110-15  48  309   1

1 个答案:

答案 0 :(得分:1)

您可以尝试遍历所有代码变量,按名称选择作为“子数据帧”的对象(例如,使用名称为subDf的模式),然后执行某些操作。只是在那些变量中。为了使我的想法更清楚,请运行以下示例:

variables = locals()
for i,j in enumerate(df.groupby('UNIT-ID')):
    variables["subDf{0}".format(i+1)] = j[1]

for each in [v for k,v in variables.items() if 'subDf' in k]:
    print(v)

#output:
#   UNIT-ID  Q1   Q2  Q3
#6   110-15  23  346   0
#7   110-15  31  419   1
#8   110-15  37  287   0
#9   110-15  36  228   1
#10  110-15  48  309   1


#  UNIT-ID  Q1   Q2  Q3
#0  110-P1  37  487   0
#1  110-P1  31  140   1
#2  110-P1  46  214   1


#  UNIT-ID  Q1   Q2  Q3
#3  110-P2  29  287   1
#4  110-P2  45  131   1
#5  110-P2  39  260   0

这样,您可以打印所有子数据帧,而不必将其保存在其他位置。由于我不确定您打算如何处理数据,因此我无法确定这是否是最佳方法。但是肯定会遍历您创建的数据框!