#python #api #loops
#python #API #циклы
Вопрос:
У меня есть большой список координат gps и большой список дат, и я пытаюсь извлечь данные с помощью API, который предоставляет данные json, которые выглядят следующим образом для одной пары координат gps:
{
"features": [
{
"geometry": {
"coordinates": [
74.11311,
30.71151,
191.24
],
"type": "Point"
},
"properties": {
"parameter": {
"T2MWET": {
"20150101": -3.44,
"20150102": -0.85
}
}
},
"type": "Feature"
}
],
где данные, о которых я забочусь, находятся в ключах «20150101» и «20150102». Это даты, и в конечном итоге у меня их будут сотни (каждый день в году).
То, что я придумал, это (я буду читать в координатах gps и списке дат):
gps_pairs = [('30.71152', '74.11307'), ('60.71393', '74.11334')]
dates = ['20150101', '20150102']
wbt2 = []
for p in gps_pairs:
url_a = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?amp;request=executeamp;identifier=SinglePointamp;parameters=T2MWETamp;startDate=20150101amp;endDate=20150102amp;userCommunity=AGamp;tempAverage=DAILYamp;outputList=CSVamp;"
url = url_a "lat=" p[0] "amp;lon=" p[1]
data_json = requests.get(url).json()
if 'error' not in data_json:
for d in dates:
wbt2.append([data_json['features'][0] ['geometry']['coordinates'],
data_json['features'][0] ['properties']['parameter']['T2MWET'][d],])
dataset = pd.DataFrame(wbt2)
dataset
Я в основном согласен с этим, за исключением того, что вывод
0 1
0 [74.11308, 30.71153, 191.24] -3.44
1 [74.11308, 30.71153, 191.24] -0.85
2 [74.11335, 60.71394, 58.7] -26.20
3 [74.11335, 60.71394, 58.7] -33.39
Но я хочу этого:
0 1 2
0 [74.11308, 30.71153, 191.24] -3.44 -0.85
1 [74.11335, 60.71394, 58.7] -26.20 -33.39
Похоже, мой цикл по датам находится не в том месте?
Я также не уверен, сколько времени потребуется для запуска, когда у меня есть более тысячи GPS-координат и 365 дат, и есть ли более эффективные способы. (Я всего месяц или около того использую Python).
Ответ №1:
Следующее даст вам все значения T2MWET
, независимо от даты.
values = list(data_json['features'][0] ['properties']['parameter']['T2MWET'].values())
Итак, если я следую тому, что вы хотите, чтобы произошло:
for p in gps_pairs:
url_a = "https://power.larc.nasa.gov/cgi-bin/v1/DataAccess.py?amp;request=executeamp;identifier=SinglePointamp;parameters=T2MWETamp;startDate=20150101amp;endDate=20150102amp;userCommunity=AGamp;tempAverage=DAILYamp;outputList=CSVamp;"
url = url_a "lat=" p[0] "amp;lon=" p[1]
data_json = requests.get(url).json()
if 'error' not in data_json:
wbt2.append([data_json['features'][0] ['geometry']['coordinates'],
list(data_json['features'][0] ['properties']['parameter']['T2MWET'].values())])
Комментарии:
1. Большое спасибо! Это работает. Затем я выполнил последнюю манипуляцию с pandas, чтобы получить ее точно так, как мне нужно
2. @Ди рад это слышать. Примите ответ и проголосуйте за то, чтобы он работал для вас!
3. Было бы неплохо принять ответ @Dee, отметив его галочкой, поскольку он помог вам с вашим вопросом.
4. Ах, извините, сделал это сейчас. Не показывает mu upvate, хотя, поскольку я новичок