在传递一些功能之后,如何在“ for循环”中返回相同的数据帧,而又不附加其他内容?

时间:2018-07-06 12:03:24

标签: python list pandas dictionary dataframe

我有三个要裁剪的数据框,我定义了一个函数;

place

我知道这有点多余,但是我正在尝试学习如何使用用户定义的函数。

然后我想在数据帧列表中使用此功能;

place

其中

{
    "country": "AUS",
    "state":"VIC",
    "place": ""Oceania" + myJSONobject['country'] + myJSONobject['state']",
}

然后我尝试运行一个for循环来裁剪每个数据帧

def croping(data, start_date='2017-04-10 00:00:00', end_date='2018-05-31 21:55:00' ):
    return data.loc[start_date:end_date]

如果我这样做,则需要将保持的数据帧附加在一起,是否有办法在每次迭代中将裁剪的数据帧称为不同的东西?像这样的东西;

df_list = [df1, df2, df3]

名称在每次迭代中都会更改,因此我剩下df1_cropped,df2_cropped等。

也许最好的方法不是使用for循环,我仍在学习

2 个答案:

答案 0 :(得分:3)

您有两种选择。您可以按列表中的位置索引数据框。在这种情况下,您可以使用列表推导。使用pd.DataFrame.pipe是Pandorable方法,因为它有助于方法链接:

df_list = [df1, df2, df3]
df_croped = [df.pipe(croping) for df in df_list]

但是,您可能会发现使用字典更干净:

df_dict = dict(enumerate((df1, df2, df3), 1))
df_croped = {k: v.pipe(croping) for k, v in df_dict.items()}

然后,您可以分别通过df_dict[0]df_croped[0]访问原始或未裁剪的第一个数据帧。

答案 1 :(得分:0)

一种方法是使用2个列表代替一个列表

df_list = [df1, df2, df3]
df_list_updated = []

for name in df_list:
    df_list_updated.append(croping(name))