python - 如何使用 python pandas 为 url、api 和日期约束编写一个 for 循环
问题描述
我试图让我的代码工作,但我不能。我想要做的是从一个带有 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)
现在我正在尝试为上面的代码编写一个 for 循环。基本上只是从 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'},
解决方案
这应该很容易做到。利用这么熊猫,这是解决方案。
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'] 放入名为“test.csv”的 csv 文件中。
希望这运作良好。
推荐阅读
- c - 关于在实践中正确使用 realloc 的新手问题
- angularjs - 如何使用 Angular JS 在 cshtml 中添加 if else?
- protocol-buffers - 在我自己的带有 Bazel 的 Protobufs 中使用 GoGo Protobuf .proto 源
- javascript - TypeError:无法读取未定义的属性“插入用户名”
- python - 合并张量并将字节字符串转换为浮点字符串
- javascript - 如何将geojson文件加载为平铺层
- filepond - 使用 FilePond 和 Doka,有什么方法可以将 HEIC 文件转换为 jpg 以便可以对其进行编辑?
- regex - 编写 Perl 正则表达式
- javascript - 反应:当我尝试从我的应用程序中获取组件并从中创建新文件时出现错误
- search - 在 J 中使用向量/矩阵时打印值及其相关索引