使用Python将嵌套JSON数据追加到列中

2024-06-16 09:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将JSON响应的输出放入一个更易于阅读的带有列标题的表中。我遇到了试图访问特定JSON信息的问题。这是我到目前为止所拥有的

import json
import requests
import pandas as pd

url = requests.get('https://apitest.com/api/scanners',auth=('', ''))
r = json.loads(url.content)
a = r['items']

我的答复是这样的here

我希望能够将此信息与扫描仪名称、天线号和最后一次扫描日期的信息一起附加,以便最终创建一个带有列标题的数据帧

d = []
for h in a:
    d.append(
            { 'ScannerName': h['name'],
              'AntennaNumber':h['antennae']['antenna'],
              'LastScanDate': h['antennae']['lastScanDate']
                        }
            ) 

此时,我收到一个“类型错误:列表索引必须是整数或片,而不是str”。我想知道是否有人对可能的解决方案有任何建议,或者我是否需要以不同的方式来处理这个问题。多谢各位


Tags: httpsimportcom信息jsonurl标题pandas
2条回答

使用纯熊猫数据帧,您可能几乎可以到达您想要的位置:

import json
import pandas as pd
import requests
url = 'https://api.wheretheiss.at/v1/satellites/25544/positions?timestamps=1593535000,1593538000'
response = requests.get(url)
r = json.loads(response.content)
pd.DataFrame(r)

(走出一张桌子)

要从嵌套的内部级别获取数据,我将使用df.apply()和lambda函数

'antennaes'的数据类型是一个列表,这就是您无法使用键获取值的原因

您必须迭代“天线”列表,然后才能获得“天线”和“最后扫描日期”键

这可能会像您预期的那样起作用:

d = []
for h in a:
   scanner = {
      'ScannerName' : h['name'],
      'AntennaNumber' : [],
      'LastScanDate' : []
   }

   for antennae in h['antennae']:
      scanner['AntennaNumber'].append(antennae['antenna'])
      scanner['LastScanDate'].append(antennae['lastScanDate'])

   d.append(scanner)

print(d)

相关问题 更多 >