python-for循环输入多个数据帧以运行

python-for循环输入多个数据帧以运行,python,list,pandas,function,dictionary,Python,List,Pandas,Function,Dictionary,原始数据集如下所示: df.head() id name level zone_id time 0 Light Rain 1 79 2018-01-01 08:00-10:00 1 Medium Rain 2 1 2018-01-02 09:00-14:00 2 Light Rain 1 79 2018-01-02 09:00-11:00 3 Medium Rain 2 1006 2018-01-01 08:

原始数据集如下所示:

df.head()

id  name      level zone_id time
0   Light Rain  1   79      2018-01-01 08:00-10:00
1   Medium Rain 2   1       2018-01-02 09:00-14:00
2   Light Rain  1   79      2018-01-02 09:00-11:00
3   Medium Rain 2   1006    2018-01-01 08:00-09:00
4   Medium Rain 2   1       2018-01-03 10:00-13:00
5   Light Rain  1   1006    2018-01-03 22:00-0:00
6   Light Rain  1   1       2018-01-03 18:00-21:00
def clean_data(data):
    ...
    return data
我想将每个区域id分离到不同的数据帧,然后清理它们

我从另一个表中获取区域列表,并获取:

 zone_list
['1006',
'79',
'1']
然后我使用for循环获得多个数据帧

for i in zone_list:
    globals()['df_'+i] = df[df.zone_id == i]
然后我需要使用如下函数清理这些数据:

df.head()

id  name      level zone_id time
0   Light Rain  1   79      2018-01-01 08:00-10:00
1   Medium Rain 2   1       2018-01-02 09:00-14:00
2   Light Rain  1   79      2018-01-02 09:00-11:00
3   Medium Rain 2   1006    2018-01-01 08:00-09:00
4   Medium Rain 2   1       2018-01-03 10:00-13:00
5   Light Rain  1   1006    2018-01-03 22:00-0:00
6   Light Rain  1   1       2018-01-03 18:00-21:00
def clean_data(data):
    ...
    return data
我想做的是将所有数据帧df_1、df_79等放到这个函数中,并输出多个数据帧

到目前为止,如果我清理数据,它的工作完美。但是我不知道如何对所有这些数据帧进行循环

我想要的是

df_79.head()

id  name      level zone_id time
0   Light Rain  1   79      2018-01-01 08:00
2   Light Rain  1   79      2018-01-02 09:00

df_1.head()

id  name      level zone_id time
1   Medium Rain 2   1       2018-01-02 09:00
4   Medium Rain 2   1       2018-01-03 10:00
6   Light Rain  1   1       2018-01-03 18:00
等等

我试着用dict,但还是不知道


谢谢大家!

您可以使用字典来保存可变数量的变量。结合,您可以使用字典理解。例如:

dfs = {key: group.pipe(clean_data) for key, group in df.groupby('zone_id')}
只是一种通过函数传递数据帧的方式,其格式便于方法链接


然后,您可以通过dfs[79]访问79的数据帧。我强烈建议您不要使用命名变量,如df_79,因为这些变量很难跟踪和管理。此外,我建议您不要使用globals,除非有特定的要求,这种情况很少发生。

您是否考虑过使用列表而不是以这种糟糕的方式设置globals?或者,就这一点而言,只使用pandas中的普通groupby?list=[df_1,df_79]对于列表中的x:x=clean_datax,但这种方式不会更改x值?如果我检查df_79,它仍然显示原始版本@这很有帮助!我仍然想知道如何将dfs提取到不同的数据帧中,因为我想将它们与另一个数据帧合并。如何将dfs提取到不同的数据帧中:我不确定您在这里需要什么。但这似乎很简单,对于每个组,您都可以使用dfs[group],例如dfs[79]、dfs[1]、dfs[1006]等等。因此,我的下一步是合并数据帧。dfs[79]。合并取消[79],左上='date',右上='date',how='inner'不会给我任何结果,但dfs[79]。合并取消[79],左上='date',右上='date',how='inner'成功合并。如果我通过cancel_79=cancel[cancel.zone='79']@Yijia将cancels[79]作为数据帧,我不知道cancels是什么样子,但可能超出了这个问题的范围,请随意回答。如果这个答案有用,请随意在左边打绿色勾。cancels={key:group for key,group in cancel.groupby'zone_id'}这是另一个也按zone_id分组的数据帧。是的,我想是的,我可能会问一个新的。仅供参考。