python - 如何将 api JSON 输出转换为数据框?
问题描述
我正在使用 SDK 从 NOAA API 中提取天气数据。下面是示例代码:
import requests, json
import pandas as pd
from pandas.io.json import json_normalize
from noaa_sdk import noaa
n = noaa.NOAA()
n.points_forecast(40.7314, -73.8656, hourly=False)
示例输出如下:
{'@context':
['https://raw.githubusercontent.com/geojson/geojson-ld/master/contexts/geojson-base.jsonld',
{'wx': 'https://api.weather.gov/ontology#', 'geo':
'http://www.opengis.net/ont/geosparql#', 'unit':
'http://codes.wmo.int/common/unit/', '@vocab':
'https://api.weather.gov/ontology#'}], 'type': 'Feature',
'geometry': {'type': 'GeometryCollection', 'geometries': [{'type':
'Point', 'coordinates': [-73.8610332, 40.7408918]}, {'type':
'Polygon',
'coordinates': [[[-73.8730892, 40.7534295],
[-73.8775823, 40.7317593],
[-73.8489801, 40.7283524],
[-73.84448110000001, 40.7500224],
[-73.8730892, 40.7534295]]]}]}, 'properties': {'updated': '2020-04-03T09:30:44+00:00', 'units': 'us', 'forecastGenerator':
'BaselineForecastGenerator', 'generatedAt':
'2020-04-03T14:18:55+00:00', 'updateTime':
'2020-04-03T09:30:44+00:00', 'validTimes':
'2020-04-03T03:00:00+00:00/P7DT4H', 'elevation': {'value': 14.9352,
'unitCode': 'unit:m'}, 'periods': [{'number': 1,
'name': 'Today',
'startTime': '2020-04-03T10:00:00-04:00',
'endTime': '2020-04-03T18:00:00-04:00',
'isDaytime': True,
'temperature': 53,
'temperatureUnit': 'F',
'temperatureTrend': 'falling',
'windSpeed': '18 mph',
'windDirection': 'N',
'icon': 'https://api.weather.gov/icons/land/day/rain,50?size=medium',
'shortForecast': 'Chance Light Rain',
'detailedForecast': 'A chance of rain. Cloudy. High near 53, with temperatures falling to around 50 in the afternoon. North wind around
18 mph, with gusts as high as 29 mph. Chance of precipitation is
50%.'}
我需要将上面的 JSON 输出转换为数据框,以便可以将其导出为 CSV 文件。如何做到这一点?
我需要数据框具有以下列
'name': 'Today',
'startTime': '2020-04-03T10:00:00-04:00',
'endTime': '2020-04-03T18:00:00-04:00',
'isDaytime': True,
'temperature': 53,
'temperatureUnit': 'F',
'temperatureTrend': 'falling',
'windSpeed': '18 mph',
'windDirection': 'N',
'icon': 'https://api.weather.gov/icons/land/day/rain,50?size=medium',
'shortForecast': 'Chance Light Rain',
'detailedForecast': 'A chance of rain. Cloudy. High near 53, with temperatures falling to around 50 in the afternoon. North wind around
18 mph, with gusts as high as 29 mph. Chance of precipitation is
50%.'
解决方案
好的,我们可以先考虑一下。所有相关字段都在列表中的同一个字典中。这是 DataFrame 的本机条目。
假设您已将 json 加载到data
变量中,您可以这样做:
df = pd.DataFrame(data['properties']['periods'],
columns= ['name', 'startTime', 'endTime', 'isDaytime', 'temperature',
'temperatureUnit', 'temperatureTrend', 'windSpeed', 'windDirection',
'icon', 'shortForecast', 'detailedForecast'])
它会给:
name startTime endTime isDaytime temperature temperatureUnit temperatureTrend windSpeed windDirection icon shortForecast detailedForecast
0 Today 2020-04-03T10:00:00-04:00 2020-04-03T18:00:00-04:00 True 53 F falling 18 mph N https://api.weather.gov/icons/land/day/rain,50... Chance Light Rain A chance of rain. Cloudy. High near 53, with t...
推荐阅读
- flutter - 颤振条件渲染。不工作?
- python - 如何在 Xcode 上设置 pandas 模块?
- python - 在 MacOS 上安装 PyQt5 失败并出现环境错误
- java - 如何解决 Android Studio 中原始文件夹的问题?
- python - 为什么我无法从 PowerBI 网页中读取 python 中带有 selenium 的 xpath
- node.js - Angular Universal如何找到导致错误TypeError的人:无法读取未定义的属性“长度”
- hazelcast - 在 Hazelcast 中更改实时 IMap 的分区键(分区迁移)
- php - SSE vs WebSockets vs 没有
- python - 将某些内容从 RSS 保存到 txt 文件时出现问题
- python - NoReverseMatch / Django / 网络博客