Как преобразовать выход API JSON в кадре данных? - PullRequest
0 голосов
/ 03 апреля 2020

Я работаю над извлечением данных о погоде из NOAA API с помощью SDK. Ниже приведен пример кода:

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%.'

1 Ответ

1 голос
/ 03 апреля 2020

Хорошо, нам проще было бы подумать первым. Все соответствующие поля находятся в одном поле в списке. Это собственная запись для 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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...