Python 如何将多个json文件读入数据帧?
我很难将多行分隔的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
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