python - 使用 for 循环创建多个数据帧
问题描述
嗨,我有如下代码:
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"])
哪个数据帧是从一个 json 文件构建的,问题是我正在处理不同的 json 文件,每个文件都可能导致不同数量的数据帧。所以上面的代码是3,它可能会变成7。有没有办法让for循环获取数据的长度:
length = len(data["spt"])
并从中制作正确数量的数据帧?所以我不需要手动完成。
解决方案
这里最简单的选择是将所有数据框放入字典或列表中。首先定义一个创建数据框的函数,然后使用列表推导。
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"]]
推荐阅读
- javascript - blob 到文本:将 blob 转换为 pdf 和 doc 文件的文本时无法读取文件内容
- akka - 在 Akka Typed 中测试行为平等
- django - uwsgi_pass 不转发 SCRIPT_NAME 标头
- python-3.x - Google-Colab 没有这样的文件或目录
- python - 在 C++ 和 python 之间共享数据,实现了 keras\tensorflow
- c++ - C++ 引用和瞬态对象
- javascript - 角度组件内的表单不提交
- html - 将 Gif 图像转换为 Base64,同时保留循环计数
- php - 在 Mac 上设置 Laravel php artisan 迁移错误:
- c# - 应用程序洞察日志丢失