无法将完整数据从 json 文件加载到数据框中
Posted
技术标签:
【中文标题】无法将完整数据从 json 文件加载到数据框中【英文标题】:Couldn't load full data into data frame from json files 【发布时间】:2017-05-03 17:07:57 【问题描述】:我是 python 新手。尝试使用此 link 为我的案例构建代码
我有 200k json 文件,需要将其放入数据框中。
为了实现这一点,我为我的问题制作了示例案例,如下所示。
我在子目录中有一个包含 json 文件的文件夹“test”。目录如下所示:
test>test1>test1> 3 json files
test>test2>test2> 3 json files
test>test3>test3> 3 json files
我正在尝试将所有 9 个 json 文件放入一个数据框中。我的代码如下:
import json
import os
import pandas as pd
import json
jpath='C:\\Users\\Sharath\\Desktop\\test'
result=[]
for i in os.listdir(jpath):
k=os.path.join(jpath,i)
for j in os.listdir(k):
l=os.path.join(k,j)
result.append(l)
print(result)
['C:\\Users\\Sharath\\Desktop\\test\\test1\\test1', 'C:\\Users\\Sharath\\Desktop\\test\\test2\\test2', 'C:\\Users\\Sharath\\Desktop\\test\\test3\\test3']
jsons_data = pd.DataFrame(columns=['homepage_url', 'number_of_employees', 'email_address'])
for i in range(len(result)):
for j in os.listdir(result[i]):
with open(os.path.join(result[i],j)) as jfile:
jtext=json.load(jfile)
homepage_url = jtext['homepage_url']
number_of_employees = jtext['number_of_employees']
email_address = jtext['email_address']
jsons_data.loc[index]=[homepage_url,number_of_employees,email_address]
print(jsons_data)
homepage_url number_of_employees email_address
2 http://www.01tek.com 1.0 khouidi.you@gmail.com
homepage_url number_of_employees email_address
2 http://www.123listo.com NaN info@123listo.com
homepage_url number_of_employees email_address
2 http://www.immortaloutdoors.com NaN
homepage_url number_of_employees \
2 http://www.1on1fitnesstraining.com 50.0
email_address
2 1on1fitnesstraining013@gmail.com
homepage_url number_of_employees email_address
2 http://1onlybat.bigcartel.com NaN office@1onlybat.com
homepage_url number_of_employees email_address
2 http://www.1doc3.com 5.0 contacto@1doc3.com
homepage_url number_of_employees email_address
2 http://1phoneapp.com 10.0
homepage_url number_of_employees email_address
2 None NaN
homepage_url number_of_employees \
2 http://www.1stalliancelending.com 51.0
email_address
2 info@placewelovemost.com
当我尝试调用jsons_data查看dataframe时,结果如下:
我无法理解为什么我只得到一个索引为 2 的结果。 请帮助我如何使用此方法获取数据框中的所有 9 个文件。
【问题讨论】:
我认为您没有在代码中的任何位置分配或更新变量index
。如果是这样,那么它总是等于零,并且您的最终列表包含一个结果,以最后处理的文件为准。
您是否考虑过 pd.read_json() 然后连接数据帧?文件平均有多大?这可能是一种选择。如果您想遵循链接中的方法,您应该更新索引(再次仔细查看您使用的链接,它们会更新索引变量),如@K.A.Buhr 所述
【参考方案1】:
有几种方法可以做到这一点。一种是使用 pd.read_json() 然后连接数据帧。假设您想使用您提到的链接中的方法,您需要更新循环中的变量索引,因此您可以更改代码,以便您的主循环为:
for i in range(len(result)):
for index, j in enumerate(os.listdir(result[i])):
with open(os.path.join(result[i],j)) as jfile:
jtext=json.load(jfile)
homepage_url = jtext['homepage_url']
number_of_employees = jtext['number_of_employees']
email_address = jtext['email_address']
jsons_data.loc[index]=[homepage_url,number_of_employees,email_address]
print(jsons_data)
注意一行:
for j in os.listdir(result[i]):
改成
for index, j in enumerate(os.listdir(result[i])):
【讨论】:
以上是关于无法将完整数据从 json 文件加载到数据框中的主要内容,如果未能解决你的问题,请参考以下文章
什么更快? Ajax 加载 JSON 或 Ajax 加载完整输出