我是一个非常新的Python用户(不到两周),被要求使用Python将我提供的200k+ JSON文件读入单个数据库中。这些JSON文件具有一级平面属性,每个文件从50到1000不等,但这50个是1000个子集之一。
以下是JSON文件的片段:
我们的目标是将这些JSON文件的主数据库进行清理,对每个列运行描述性统计并创建最终的、清洁的数据库。
我的背景是SAS,所以我想使用pandas创建一个(非常)大的数据帧。我过去一周一直在查阅stack overflow,并利用了一些经验,但我感觉一定有一种方法可以使它变得更加高效。
下面是我迄今为止编写的代码——它可以运行,但速度非常慢(即使在消除以“result”开头的不需要的输入属性/列之后,我估计它需要几天甚至几周时间才能运行)。此外,我将字典转换为最终表格的笨拙方式留下了列索引号在列名之上的问题,我无法解决这个问题。
任何想法和建议都非常感激。如果在Python中使用不同的技术或方法可以更有效地实现我们上述的目标,我完全可以接受。谢谢!
以下是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创建一个(非常)大的数据帧。我过去一周一直在查阅stack overflow,并利用了一些经验,但我感觉一定有一种方法可以使它变得更加高效。
下面是我迄今为止编写的代码——它可以运行,但速度非常慢(即使在消除以“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中使用不同的技术或方法可以更有效地实现我们上述的目标,我完全可以接受。谢谢!
json.load()
(文档)直接读取文件。无需添加read()
并执行json.loads()
。 - patrickDataFrame
(参见这里),以便您可以将其写入文件。 - patrick