我已尝试过json_normalize,这似乎有效;但是,它不会打印我想要的输出。
import requests
import json
from pandas.io.json import json_normalize
import pandas as pd
url = "https://www.qnt.io/api/results?pID=gifgif&mID=54a309ae1c61be23aba0da62&key=54a309ac1c61be23aba0da3f"
aResponse = requests.get(url)
y = json.loads(aResponse.content)
json_test = json.dumps(y, indent = 4, sort_keys=True)
print(json_test)
csv = json_normalize(y['results'])
print(csv)
显示此代码的输出很困难且非常混乱;因此,我认为这符合我们的最大利益,我将其排除在外。如果这是一个有用的信息,我可以添加它。
json.dumps部分简单地orgranize我的json文件,以便它可以很容易地查看。不幸的是,我无法发布整个json文件,因为Stack并不是我格式化的忠实粉丝。这是一个小片段:
{
"query_parameters": {
"limit": 10,
"mID": "54a309ae1c61be23aba0da62",
"skip": 0,
"sort": 1
},
"results": [
{
"cID": "5314ab42d34b6c5b402aead4",
"content": "BE9kUwvLfsAmI",
"content_data": {
"added_with_admin": false,
"dateAdded": 1393863490.072894,
"embedLink": "http://media3.giphy.com/media/BE9kUwvLfsAmI/giphy.gif",
"still_image": "http://media.giphy.com/media/BE9kUwvLfsAmI/200_s.gif",
"tags": [
"adam levine",
"embarassed",
"the voice",
"confession"
]
},
"content_type": "gif",
"index": 269,
"parameters": {
"mu": 35.92818823777915,
"sigma": 1.88084276812386
},
"rank": 0
},
其中大约有10个(一直到6119;但是,我试图让这个工作的一部分)。我希望我的输出按顺序排序:rank,tags,embedLink,mu,sigma,index。这是我想要的输出的一个例子:
0, adam levine, embarassed, the voice, confession, http://media3.giphy.com/media/BE9kUwvLfsAmI/giphy.gif, 35.92818823777915, 1.88084276812386, 269
我想将它作为csv文件;但是,我认为使用Pandas创建数据框也非常有用。我认为我的问题出现是因为我有一个如此庞大的嵌入式json文件,并且计算机很难组织这个大型数据集。任何意见,将不胜感激!
答案 0 :(得分:3)
首先,您可以使用requests.json()代替requests.text
将响应内容作为JSON。
import requests
import pandas as pd
from pprint import pprint
url = "https://www.qnt.io/api/results?pID=gifgif&mID=54a309ae1c61be23aba0da62&key=54a309ac1c61be23aba0da3f"
response = requests.get(url)
results = response.json()["results"]
# pprint(results)
[{'cID': '5314ab42d34b6c5b402aead4',
'content': 'BE9kUwvLfsAmI',
'content_data': {'added_with_admin': False,
'dateAdded': 1393863490.072894,
'embedLink': 'http://media3.giphy.com/media/BE9kUwvLfsAmI/giphy.gif',
'still_image': 'http://media.giphy.com/media/BE9kUwvLfsAmI/200_s.gif',
'tags': ['adam levine',
'embarassed',
'the voice',
'confession']},
'content_type': 'gif',
'index': 269,
'parameters': {'mu': 35.92818823777915, 'sigma': 1.88084276812386},
'rank': 0},
{'cID': '5314ab4dd34b6c5b402aeb97',
...
然后您可以使用pd.DataFrame.from_dict加载字典:
df = pd.DataFrame.from_dict(results)
# print(df.head(2))
cID content \
0 5314ab42d34b6c5b402aead4 BE9kUwvLfsAmI
1 5314ab4dd34b6c5b402aeb97 NZhO1SEuFmhj2
content_data content_type index \
0 {'embedLink': 'http://media3.giphy.com/media/B... gif 269
1 {'embedLink': 'http://media1.giphy.com/media/N... gif 464
parameters rank
0 {'mu': 35.92818823777915, 'sigma': 1.880842768... 0
1 {'mu': 35.70238333972232, 'sigma': 1.568292935... 1
然后使用.apply(pd.Series)
进一步扩展dict中的列:
df = pd.concat([df.drop(["content_data"], axis=1), df["content_data"].apply(pd.Series)], axis=1)
df = pd.concat([df.drop(["parameters"], axis=1), df["parameters"].apply(pd.Series)], axis=1)
# print(df.head(2))
cID content content_type index rank \
0 5314ab42d34b6c5b402aead4 BE9kUwvLfsAmI gif 269 0
1 5314ab4dd34b6c5b402aeb97 NZhO1SEuFmhj2 gif 464 1
added_with_admin dateAdded \
0 False 1.393863e+09
1 False 1.393864e+09
embedLink \
0 http://media3.giphy.com/media/BE9kUwvLfsAmI/gi...
1 http://media1.giphy.com/media/NZhO1SEuFmhj2/gi...
still_image \
0 http://media.giphy.com/media/BE9kUwvLfsAmI/200...
1 http://media.giphy.com/media/NZhO1SEuFmhj2/200...
tags mu sigma
0 [adam levine, embarassed, the voice, confession] 35.928188 1.880843
1 [ryan gosling, facepalm, embarrassed, confession] 35.702383 1.568293
将标签从列表转换为字符串:
df["tags"] = df["tags"].apply(lambda x: ", ".join(x))
# print(df.head(2)["tags"])
0 adam levine, embarassed, the voice, confession
1 ryan gosling, facepalm, embarrassed, confession
最后得到你想要的专栏:
df = df[["rank", "tags", "embedLink", "mu", "sigma", "index"]]
# print(df.head(2))
rank tags \
0 0 adam levine, embarassed, the voice, confession
1 1 ryan gosling, facepalm, embarrassed, confession
embedLink mu sigma \
0 http://media3.giphy.com/media/BE9kUwvLfsAmI/gi... 35.928188 1.880843
1 http://media1.giphy.com/media/NZhO1SEuFmhj2/gi... 35.702383 1.568293
index
0 269
1 464