error2007s :
I am working on pulling weather data from NOAA API using a SDK. Below is the sample code:
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)
The sample output is below:
{'@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%.'}
I need to convert above JSON output to a data frame so that I can export it as a CSV file. How to achieve that?
I need the dataframe to have the below columns
'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%.'
Serge Ballesta :
Ok, it is easier that we could have thought first. All the relevant fields are in the same dict in a list. This is a native entry for a DataFrame.
Assuming you have loaded the json in a data
variable, you can just do:
df = pd.DataFrame(data['properties']['periods'],
columns= ['name', 'startTime', 'endTime', 'isDaytime', 'temperature',
'temperatureUnit', 'temperatureTrend', 'windSpeed', 'windDirection',
'icon', 'shortForecast', 'detailedForecast'])
It will give:
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...
Guess you like
Origin http://10.200.1.11:23101/article/api/json?id=398414&siteId=1