有人会帮助我优化我的解决方案加载数据从json文件使用json正常化和pd concat? 我的5k json文件像:
[
{
"id": {
"number": 2121",
"exp" : "1",
"state": "California"
},
"state": [
{
"city": "San Francisco",
"pm": "17",
"spot": "2"
},
{
"city": "San Diego",
"pm": "14",
"spot": "1"
}
]
},
{
"id": {
"number": "2122",
"exp" : "1"
"state": "California",
},
"state": [
{
"city: "San Jose",
"pm": "15",
"spot": "1"
}
]
}
]
我必须从'state'加载数据,我必须有每个城市的日期(取自json文件名)。我的解决方案是
json_paths = 'my files_directory'
jsfiles = glob.glob(os.path.join(json_paths, "*.json"))
main_df = pd.DataFrame()
for file in jsfiles:
df = pd.read_json(file)
for i in df['state']:
df2 = pd.concat([pd.DataFrame(json_normalize(i))], ignore_index=False, sort = False)
df2['date'] = file
main_df = pd.concat([main_df, df2])
装载1000个json需要很长时间,更不用说装载5000个json了。有什么方法可以优化我的解决方案吗? 问题来源StackOverflow 地址:/questions/59383661/loading-json-files-using-json-normalize-pd-concat
您正在使用的许多函数看起来都很复杂,因为它们在某种程度上确实如此。json_normalize()用于平铺字典(删除嵌套),因为JSON状态对象已经是平铺的,所以不需要这样做。用pd。如果您的JSON文件已经具有方便阅读的格式,read_json是可以的,但是您的格式不是。 记住这些事情之后,最简单的方法是首先用Python解析每个JSON文件,这样就可以获得与字典中的单行对应的数据,并保留所有这些数据的列表。 我还使用了pathlib。路径对象来清除通配符和文件名提取。 像这样的事情是你想要做的:
import pandas as pd
from pathlib import Path
import json
# each dict in states corresponds to a row
states = []
# you can glob directly on pathlib.Path objects
for file in Path("my files_directory").glob("*.json"):
# load json data
with open(file) as jsonf:
data = json.load(jsonf)
# add the date from the filename stem to each dict, and append to list
for result in data:
for state in result["state"]:
state["date"] = file.stem
states.append(state)
# create a df where each row corresponds to each dict in states
df = pd.DataFrame(states)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。