如何将多个json文件读入pandas数据框?

时间:2019-07-17 02:00:32

标签: python json pandas dataframe

我很难将多个行分隔的JSON文件加载到单个pandas数据框中。这是我正在使用的代码:

import os, json
import pandas as pd
import numpy as np
import glob
pd.set_option('display.max_columns', None)

temp = pd.DataFrame()

path_to_json = '/Users/XXX/Desktop/Facebook Data/*' 

json_pattern = os.path.join(path_to_json,'*.json')
file_list = glob.glob(json_pattern)

for file in file_list:
    data = pd.read_json(file, lines=True)
    temp.append(data, ignore_index = True)

当我翻阅file_list时,似乎所有文件都已加载,但是无法弄清楚如何将每个文件放入数据帧。大约有50个文件,每个文件中都有几行。

4 个答案:

答案 0 :(得分:2)

如果您需要扁平化 JSON,Juan Estevez 的方法将无法按原样工作。这是一个替代方案:

import pandas as pd

dfs = []
for file in file_list:
    with open(file) as f:
        json_data = pd.json_normalize(json.loads(f.read()))
    dfs.append(json_data)
df = pd.concat(dfs, sort=False) # or sort=True depending on your needs

或者如果您的 JSON 是行分隔的(未测试):

import pandas as pd

dfs = []
for file in file_list:
    with open(file) as f:
        for line in f.readlines():
            json_data = pd.json_normalize(json.loads(line))
            dfs.append(json_data)
df = pd.concat(dfs, sort=False) # or sort=True depending on your needs

答案 1 :(得分:1)

也许您应该声明,是否使用pandas pd.to_json()或其他方式创建了json文件。 我使用了不是用pd.to_json()创建的数据,我认为在这种情况下使用pd.read_json()是不可行的。相反,我编写了一种定制的for-each循环方法,将所有内容写入DataFrames

答案 2 :(得分:0)

将最后一行更改为:

temp = temp.append(data, ignore_index = True)

我们之所以要这样做,是因为未在适当位置进行追加。 append方法不会修改数据框。它只是返回带有追加操作结果的新数据帧。

答案 3 :(得分:0)

我将 Juan Estevez 的回答与 glob 结合起来。非常感谢。

import pandas as pd
import glob

def readFiles(path):
    files = glob.glob(path)
    dfs = [] # an empty list to store the data frames
    for file in files:
        data = pd.read_json(file, lines=True) # read data frame from json file
        dfs.append(data) # append the data frame to the list

    df = pd.concat(dfs, ignore_index=True) # concatenate all the data frames in the list.
    return df