gpt4 book ai didi

Python:将 200k JSON 文件读入 Pandas Dataframe

转载 作者:太空狗 更新时间:2023-10-30 02:55:04 25 4
gpt4 key购买 nike

非常 是 python 的新手(< 2 周),并被要求将我提供的 200k+ JSON 文件(按原样)读入单个数据库(使用 python)。这些 JSON 文件具有扁平的一级属性,这些属性在 50 -> 1000 之间变化,但那 50 个是 1000 个的子集。

这是一个 json 文件的片段:

{
"study_type" : "Observational",
"intervention.intervention_type" : "Device",
"primary_outcome.time_frame" : "24 months",
"primary_completion_date.type" : "Actual",
"design_info.primary_purpose" : "Diagnostic",
"design_info.secondary_purpose" : "Intervention",
"start_date" : "January 2014",
"end_date" : "March 2014",
"overall_status" : "Completed",
"location_countries.country" : "United States",
"location.facility.name" : "Generic Institution",
}

我们的目标是获取这些 JSON 文件的主数据库,清理各个列,对这些列运行描述性统计并创建一个最终的清理数据库。

我有 SAS 背景,所以我的想法是使用 pandas 并创建一个(非常)大的数据框。过去一周我一直在梳理堆栈溢出问题,并且利用了一些经验教训,但我觉得必须有一种方法可以使这种方式更有效率。

下面是我到目前为止编写的代码 - 它可以运行,但是非常慢(我估计即使在消除以“result”开头的不需要的输入属性/列之后也需要几天甚至几周的时间才能运行)。

此外,我将字典转换为最终表的笨拙方式是在列名称上方留下列索引号,我一直无法弄清楚如何删除它。

import json, os
import pandas as pd
from copy import deepcopy

path_to_json = '/home/ubuntu/json_flat/'

#Gets list of files in directory with *.json suffix
list_files = [pos_json for pos_json in os.listdir(path_to_json) if pos_json.endswith('.json')]

#Initialize series
df_list = []

#For every json file found
for js in list_files:

with open(os.path.join(path_to_json, js)) as data_file:
data = json.loads(data_file.read()) #Loads Json file into dictionary
data_file.close() #Close data file / remove from memory

data_copy = deepcopy(data) #Copies dictionary file
for k in data_copy.keys(): #Iterate over copied dictionary file
if k.startswith('result'): #If field starts with "X" then delete from dictionary
del data[k]
df = pd.Series(data) #Convert Dictionary to Series
df_list.append(df) #Append to empty series
database = pd.concat(df_list, axis=1).reset_index() #Concatenate series into database

output_db = database.transpose() #Transpose rows/columns
output_db.to_csv('/home/ubuntu/output/output_db.csv', mode = 'w', index=False)

非常感谢任何想法和建议。如果它更有效并且仍然允许我们满足上述目标,我完全愿意使用完全不同的技术或方法(在 python 中)。

谢谢!

最佳答案

我尝试以更简洁的方式复制您的方法,减少复制和附加。它适用于您提供的示例数据,但不知道您的数据集中是否还有更复杂的内容。你可以试试这个,希望评论对你有帮助。

import json
import os
import pandas
import io


path_to_json = "XXX"

list_files = [pos_json for pos_json in os.listdir(path_to_json) if pos_json.endswith('.json')]

#set up an empty dictionary
resultdict = {}

for fili in list_files:
#the with avoids the extra step of closing the file
with open(os.path.join(path_to_json, fili), "r") as inputjson:
#the dictionary key is set to filename here, but you could also use e.g. a counter
resultdict[fili] = json.load(inputjson)
"""
you can exclude stuff here or later via dictionary comprehensions:
http://stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python
e.g. as in your example code
resultdict[fili] = {k:v for k,v in json.load(inputjson).items() if not k.startswith("result")}
"""

#put the whole thing into the DataFrame
dataframe = pandas.DataFrame(resultdict)

#write out, transpose for desired format
with open("output.csv", "w") as csvout:
dataframe.T.to_csv(csvout)

关于Python:将 200k JSON 文件读入 Pandas Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43660754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com