使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中

Posted

技术标签:

【中文标题】使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中【英文标题】:Reading several nested .json files from a specific folder, into excel using python/pandas 【发布时间】:2021-02-27 11:03:36 【问题描述】:

我想将文件夹中的几个嵌套 json 文件读入一个 excel 文件。 由于大多数.json文件彼此不同(每个文件中有不同的嵌套级别),这也意味着excel文件中的某些列(值)显然需要为NaN。我用这段代码读取特定文件没有问题,但是要一个一个读取10 000个需要一段时间。

import json 
import pandas as pd 
from pandas.io.json import json_normalize 

with open('file1.json','r') as f: #Here I want help, since i need to read 10 000 json files.
    data = json.loads(f.read())
multiple_level_data = pd.json_normalize(data, record_path =['data'], errors='ignore', meta =['total-count'], meta_prefix='config_params_', record_prefix='dbscan_')
multiple_level_data.to_excel('file1converted.xlsx', index=False)

但是,如何修改我的 python 代码以读取文件夹中的所有 json 文件,而不仅仅是 file1.json?

【问题讨论】:

【参考方案1】:

以上来自 Wasif 的解决方案效果很好, 但是我添加了这个以将其放入一个 excel 文件中。

df = pd.DataFrame()
for file in files:
     if file.endswith('.xlsx'):
         df = df.append(pd.read_excel(file, engine='openpyxl'), ignore_index=True) 
df.to_excel("AllJsonFilesInOneExcel.xlsx")

谢谢。

【讨论】:

【参考方案2】:

你可以试试os.listdir():

import os
import json 
import pandas as pd 
from pandas.io.json import json_normalize 

for js in [x for x in os.listdir() if x.endswith('.json')]:
  with open(js,'r') as f: 
    data = json.loads(f.read())
    multiple_level_data = pd.json_normalize(data, record_path =['data'], errors='ignore', meta =['total-count'], meta_prefix='config_params_', record_prefix='dbscan_')
    multiple_level_data.to_excel(js+'converted.xlsx', index=False)

【讨论】:

谢谢 Wasif,这似乎工作得很好,但是,它为每个 json 文件创建了一个 excel 文件。是否可以代替为每个 .json 创建 10 000 个 excel 文件,而是将此 for 循环合并到一个具有 10 000 行的 excel 文件中?

以上是关于使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 如何在 Excel 工作表的特定列中写入

从 csv.reader 之后的列(Python Pandas)中获取最早的日期

python pandas - 处理嵌套 groupby 的最佳方法

使用 pandas Python (pandas.io.parsers.TextFileReader) 从文件中读取数据时出现问题

如何使用 Python Pandas 合并多个 CSV 文件

python pandas dataframe index,错误TypeError:输入必须是可迭代的,pandas版本可能错误