получить временные ряды осадков для ячейки сетки, ближайшей к выбранной станции (l oop по всем) - PullRequest
1 голос
/ 25 марта 2020

Я довольно новичок с Python и мне нужна помощь. Мне нужно найти ячейки сетки в файле осадков (.n c), который соответствует расположению станций подачи воды (файл Excel), а затем извлечь временные ряды для этих ячеек сетки.

У меня есть файл Exel со 117 станциями в Норвегии, который содержит столбцы с названием станции и их ареалом, широтой и долготой. У меня также есть файл c с сериями осадков для этих станций.

Мне удается запустить сценарий python (записная книжка Jupyter) для станции одновременно, но я хочу запустить его для всех станций. Как мне это сделать? Я знаю, что мне нужно сделать для l oop кое-как.

Это мой код:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import os
import xarray as xr
import cartopy.crs as ccrs
import cartopy as cy
metapath = "Minestasjoner.xlsx" 
rrdatapath = "cropped_monsum_rr_ens_mean_0.25deg_reg_v20.0e.nc" 
meta = pd.read_excel(metapath)
rrdata = xr.open_dataset(rrdatapath)
i=0
station = meta.iloc[i]["Regime"]*100000 + meta.iloc[i]["Main_nr"]
lon = meta.iloc[i]["Longitude"] #get longitude
lat = meta.iloc[i]["Latitude"] #get latitude
rr_at_obsloc = rrdata["rr"].sel(latitude=lat, longitude=lon, method='nearest') 
df = rr_at_obsloc.to_dataframe() 
print("Station %s with lon=%.2f and lat=%.2f have closest rr gridcell at lon=%.2f and lat=%.2f"%(station,lon,lat,df.longitude[0],df.latitude[0]))
df

1 Ответ

1 голос
/ 27 марта 2020

Я думаю, что самый простой способ сделать это - создать python dictionary, содержащий название станции и временные ряды осадков для этой станции, а затем преобразовать этот словарь в pandas.DataFrame.

Вот как вы это делаете простым l oop:

"""
Everything you had previously...
"""

# Initialize empty dictionary to hold station names and time-series
station_name_and_data = {}

# Loop over all stations
for i in range(117):
    # Get name of station 'i'
    station = meta.iloc[i]["Regime"]*100000 + meta.iloc[i]["Main_nr"]

    # Get lat/lon of station 'i'
    lon = meta.iloc[i]["Longitude"] 
    lat = meta.iloc[i]["Latitude"] 

    # Extract precip time-series for this lat-lon
    rr_at_obsloc = rrdata["rr"].sel(latitude=lat, longitude=lon, method='nearest')

    # Put this station name and it's relevant time-series into a dictionary 
    station_name_and_data[station]=rr_at_obsloc

# Finally, convert this dictionary to a pandas dataframe 
df = pd.DataFrame(data=station_name_and_data)

print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...