Newer
Older
Jeremy Auclair
committed
return raster_stats
Jeremy Auclair
committed
def extract_weather_dataframe(rain_path: str, ET0_path: str, shapefile: str, config_file: str, save_path: str) -> None:
"""
Extract a weather dataframe for each variable (Rain, ET0) and merge them in one
dataframe. This dataframe is saved as ``csv`` file.
Arguments
=========
Jeremy Auclair
committed
path to rain Geotiff file
Jeremy Auclair
committed
path to ET0 Geotiff file
Jeremy Auclair
committed
path to shapefile
Jeremy Auclair
committed
path to config file
Jeremy Auclair
committed
save path for weather dataframe
Returns
=======
``None``
"""
# Generate arguments for multiprocessing
args = [(rain_path, shapefile, config_file), (ET0_path, shapefile, config_file)]
print('\nStarting weather data extraction on two cores..\n')
# Extract weather values for both weather varialbes
with Pool(2) as p:
Jeremy Auclair
committed
results = p.map(extract_rasterstats, args)
Jeremy Auclair
committed
# Collect results in a single dataframe
weather_dataframe = pd.DataFrame(results[0], columns = ['date', 'id', 'Rain', 'LC'])
weather_dataframe['ET0'] = pd.DataFrame(results[1], columns = ['date', 'id', 'ET0', 'LC'])['ET0']
# Reorder columns
weather_dataframe = weather_dataframe.reindex(columns = ['date', 'id', 'Rain', 'ET0', 'LC'])
# Format datatypes
weather_dataframe['Rain'] = np.round(weather_dataframe['Rain']).astype(int)
weather_dataframe['ET0'] = np.round(weather_dataframe['ET0']).astype(int)
# Change date type
weather_dataframe['date'] = pd.to_datetime(weather_dataframe['date'])
# Save dataframe to csv
weather_dataframe.to_csv(save_path, index = False)
return None