python-for循环输入多个数据框以起作用

时间:2018-06-29 21:23:36

标签: 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: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

我想将每个zone_id分离到不同的数据帧,然后清理它们。

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

 zone_list
['1006',
'79',
'1']

然后我使用for循环来获取多个数据帧

for i in zone_list:
    globals()['df_'+i] = df[df.zone_id == i]

然后我需要使用如下函数清除这些数据:

def clean_data(data):
    ...
    return data

我要做的是将所有数据帧df_1,df_79等放入此函数并输出多数据帧。

到目前为止,如果我执行clean_data(df_1),就可以正常工作。但是我不知道如何为所有这些数据帧制作循环。

我想要的是

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,但还是不知道。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以使用字典来保存可变数量的变量。与pd.DataFrame.groupby结合使用,您可以利用字典理解功能。例如:

dfs = {key: group.pipe(clean_data) for key, group in df.groupby('zone_id')}

pd.DataFrame.pipe只是一种将数据框通过一种便于方法链接的格式通过函数传递的方式。

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