我有三个要裁剪的数据框,我定义了一个函数;
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循环,我仍在学习
答案 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))