Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将多个json文件读入数据帧?_Python_Json_Pandas_Dataframe - Fatal编程技术网

Python 如何将多个json文件读入数据帧?

Python 如何将多个json文件读入数据帧?,python,json,pandas,dataframe,Python,Json,Pandas,Dataframe,我很难将多行分隔的JSON文件加载到单个数据帧中。这是我正在使用的代码: 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.jo

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

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)

当我查看
文件列表
时,看起来所有文件都在加载,但无法确定如何将每个文件放入数据帧中。大约有50个文件,每个文件中有几行。

将最后一行更改为:

temp = temp.append(data, ignore_index = True)
我们必须这样做的原因是因为追加没有发生在适当的位置。append方法不修改数据帧。它只返回一个新的数据帧和追加操作的结果

编辑: 写了这个答案后,我学到了永远不要在循环中使用
DataFrame.append
,因为它会导致二次复制(请参阅)

您应该做的是首先创建一个数据帧列表,然后使用
pd.concat
在一个操作中连接所有数据帧。像这样:

dfs=[]#存储数据帧的空列表
对于文件列表中的文件:
data=pd.read_json(file,lines=True)#从json文件中读取数据帧
dfs.append(data)#将数据框追加到列表中
temp=pd.concat(dfs,ignore_index=True)#连接列表中的所有数据帧。

这个替代方法应该快得多。

如果json文件是使用pandas pd.to_json()或以其他方式创建的,您可能应该声明。
我使用的数据不是用pd.to_json()创建的,我认为在我的例子中不可能使用pd.read_json()。相反,我编写了一个定制的for each循环方法,将所有内容写入数据帧。如果需要展平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是以行分隔的(未测试) :


@不客气!如果您觉得答案有用,请记住接受它。您的意思可能是“文件是否为有效的JSON”…;)谢谢@Skippy le Grand Gourou。我认为您的代码需要在“json_normalize”前面加上“pd”才能运行。谢谢@GbG,更正。
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