使用 for 循环创建多个数据帧

Posted

技术标签:

【中文标题】使用 for 循环创建多个数据帧【英文标题】:Creating multiple dataframes using a for loop 【发布时间】:2021-04-18 15:47:36 【问题描述】:

您好,我的代码如下所示:

with open("file123.json") as json_file:
    data = json.load(json_file)

df_1 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data["spt"][1].items()]))
df_1_made =pd.json_normalize(json.loads(df_1.to_json(orient="records"))).T.drop(["content.id","shortname","name"])

df_2 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data["spt"][2].items()]))
df_2_made = pd.json_normalize(json.loads(df_2.to_json(orient="records"))).T.drop(["content.id","shortname","name"])

df_3 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data["spt"][3].items()]))
df_3_made = pd.json_normalize(json.loads(df_3.to_json(orient="records"))).T.drop(["content.id","shortname","name"])

dataframe 是从 json 文件构建的 问题是我正在处理不同的 json 文件,每个文件都可能导致不同数量的数据帧。所以上面的代码是3,它可能会变成7。有没有办法让for循环获取数据的长度:

length = len(data["spt"])

并从中制作正确数量的数据帧?所以我不需要手动操作。

【问题讨论】:

【参考方案1】:

这里最简单的选择是将所有数据框放入字典或列表中。首先定义一个创建数据框的函数,然后使用列表推导。

def create_df(data):
    df = pd.DataFrame(
        dict(
            [(k,pd.Series(v)) for k,v in data]
        )
    )
    df =pd.json_normalize(
        json.loads(
            df.to_json(orient="records")
        )
    ).T.drop(["content.id","shortname","name"])

    return df

my_list_of_dfs = [create_df(data.items()) for x in data["spt"]]

【讨论】:

dict创建大概可以简化为:k: pd.Series(v) for k, v in data

以上是关于使用 for 循环创建多个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

如何从 for 循环返回多个具有唯一名称的 pandas 数据帧?

如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?

如何使用 for 循环组合多个数据帧?

将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

使用lapply或for循环将多个csv文件拉入自己的R数据帧

R中带有for循环的多个数据帧上的行名