как написать для l oop с python pandas для URL, API и ограничения даты - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь заставить свой код работать, но не могу. Я пытаюсь получить данные с веб-сайта с кодом API. Цель состоит в том, чтобы получить информацию с определенной даты (в данном случае с 2000 по 2003 год)

import requests
import json


url ='https://opendata.aemet.es/opendata/api/valores/climatologicos/diarios/datos/' 
start= 'fechaini/2000-01-01T00:00:00UTC/'
end = 'fechafin/2003-01-01T00:00:00UTC/' 
station= 'estacion/1690A/'
api= 'xxxxxxxxx'

complete_url=url+start+end+station+api
print(complete_url)

response = requests.get(complete_url)

data_url = json.loads(response.text)['datos']

data = requests.get(data_url)
data.text
json.loads(data.text)

Теперь я пытаюсь написать для l oop для приведенного выше кода. В основном просто итерация с 2000 по 2003 год и сохранение в файл csv.

Это то, что я пробовал

responses = list()
station = '1690A'


for station in stations:
   rr = requests.get(data_url)
   data=json.loads(rr.text)
   responses.append(data)

Но тогда, где я могу установить ограничение даты и как мне включить его в файл csv

Спасибо за помощь

Изменить: образец json

{'fecha': '2000-01-01',
  'indicativo': '1690A',
  'nombre': 'OURENSE',
  'provincia': 'OURENSE',
  'altitud': '143',
  'tmed': '3,2',
  'prec': '0,0',
  'tmin': '-2,4',
  'horatmin': '08:45',
  'tmax': '8,8',
  'horatmax': '16:25',
  'dir': '14',
  'velmedia': '0,6',
  'racha': '3,9',
  'horaracha': '08:18',
  'sol': '4,2',
  'presMax': '1012,7',
  'horaPresMax': '11',
  'presMin': '1009,9',
  'horaPresMin': '15'},
 {'fecha': '2000-01-02',
  'indicativo': '1690A',
  'nombre': 'OURENSE',
  'provincia': 'OURENSE',
  'altitud': '143',
  'tmed': '2,7',
  'prec': '0,0',
  'tmin': '-2,4',
  'horatmin': '08:40',
  'tmax': '7,8',
  'horatmax': '16:30',
  'dir': '14',
  'velmedia': '0,6',
  'racha': '3,6',
  'horaracha': '09:56',
  'sol': '3,7',
  'presMax': '1012,2',
  'horaPresMax': '10',
  'presMin': '1009,7',
  'horaPresMin': 'Varias'},
 {'fecha': '2000-01-03',
  'indicativo': '1690A',
  'nombre': 'OURENSE',
  'provincia': 'OURENSE',
  'altitud': '143',
  'tmed': '4,2',
  'prec': '0,0',
  'tmin': '-1,6',
  'horatmin': '08:20',
  'tmax': '10,0',
  'horatmax': '16:00',
  'dir': '15',
  'velmedia': '0,6',
  'racha': '2,8',
  'horaracha': '07:40',
  'sol': '4,2',
  'presMax': '1011,7',
  'horaPresMax': '11',
  'presMin': '1008,7',
  'horaPresMin': '16'},

1 Ответ

0 голосов
/ 09 июля 2020

Это должно быть легко. Используя так pandas, вот решение.

import pandas as pd
from datetime import datetime as dt
def get_csv(jsonData, startingDate, endingDate, csvFilename):
    startingDate = dt.strptime(startingDate, '%Y-%m-%d')
    endingDate = dt.strptime(endingDate, '%Y-%m-%d')
    csvJson = []
    for each in jsonData:
        try: 
            if startingDate <= dt.strptime(each['fecha'], '%Y-%m-%d') <= endingDate: 
                csvJson.append(each) 
        except: 
            pass
    pd.DataFrame(csvJson).to_csv(csvFilename)

Вызовите функцию, как показано ниже

>>> get_csv(jsonData, '2000-01-03', '2001-04-23', 'test.csv')

Это должно поместить диапазон дат между ['2000 -01-03 'и' 2001-04-23 '] в CSV-файл с именем' test.csv '.

Надеюсь, это сработает.

...