Я пытаюсь объединить фрейм данных pandas и набор данных Xarray на основе трех атрибутов координат: ['долгота', 'широта', 'время'].
В соответствии с Pydata Org., объединение двух массивов данных xarray довольно просто, поскольку они имеют одинаковые координаты.Сообщество предоставляет несколько вариантов объединения:
- Объединение вложенных
- Слияние
- Объединение
Чтобы объединить обе данные (по оси = 1), мне пришли в голову два решения:
Преобразовать все данные в кадр данных pandas изатем объедините оба файла через панд.Это простое программное решение, но оно неэффективно с точки зрения использования памяти процессора (в случае, если Netcdf слишком велик для размещения в памяти).
Преобразование всех данных в Netcdf DataArrays / DataFrames, а затем выполните объединение с помощью методов Xarray.
Мой вопрос касается второго варианта: объединение 2 файлов Netcdf.
Первый файл, который я хочу объединить, - это DailyНабор данных осадков от CHIRPS.
Второй файл представляет собой pandas dataframe, содержащий данные о суточных осадках с метеорологической станции.
Когда я читаю данные CHIRPS, я получаю следующее описание:
In []:print(CHIRPS)
Out[]:
<xarray.Dataset>
Dimensions: (time: 5794)
Coordinates:
latitude float32 -1.375
longitude float32 -48.425003
* time (time) datetime64[ns] 2003-01-20 2003-01-21 ... 2018-11-30
Data variables:
precipitation (time) float32 dask.array<shape=(5794,), chunksize=(346,)>
Attributes:
Conventions: CF-1.6
title: CHIRP Version 1.0
history: created by Climate Hazards Group
version: Version 1.0
date_created: 2017-10-24
creator_name: Pete Peterson
creator_email: pete@geog.ucsb.edu
institution: Climate Hazards Group. University of California at Sa...
documentation: http://pubs.usgs.gov/ds/832/
reference: Funk, C.C., Peterson, P.J., Landsfeld, M.F., Pedreros,...
comments:
acknowledgements: The Climate Hazards Group InfraRed Precipitation with ...
website: http://chg.geog.ucsb.edu/data/chirps/index.html
Когда я читаю данные главы Метеорологической станции (все еще в кадре данных панд), я получаю следующее описание:
In []: print(Meteorological_station.head())
Out[]:
latitude longitude time precipitation altitude
0 -1.4 -48.433333 2003-01-20 4.8 576
1 -1.4 -48.433333 2003-01-21 5.4 576
2 -1.4 -48.433333 2003-01-22 0.6 576
3 -1.4 -48.433333 2003-01-23 0.0 576
4 -1.4 -48.433333 2003-01-24 0.0 576
И когда япреобразуйте кадр данных pandas в данные Xarray:
In [1]: Xarray_Meteorological_station = Meteorological_station.set_index(['latitude', 'longitude', 'time']).to_xarray()
In [2]: Xarray_Meteorological_station # checking xarray converted data
Out[3]:
<xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, time: 5794)
Coordinates:
* time (time) datetime64[ns] 2003-01-20 2003-01-21 ... 2018-11-30
* latitude (latitude) float64 -1.4
* longitude (longitude) float64 -48.43
Data variables:
precipitation (latitude, longitude, time) float64 4.8 5.4 0.6 ... 27.4 43.8
altitude (latitude, longitude, time) int64 576 576 576 ... 1152 1152
Когда я пытаюсь объединить свои файлы, я получаю несколько сообщений об ошибках.
ЗдесьВот несколько примеров, основанных на различных попытках объединения:
# Attempt 1:
input[] : final = xr.concat([CHIRPS, Xarray_Meteorological_station])
output[]: AttributeError: 'DataArray' object has no attribute 'variables'
# Attempt 2:
input[] : final = CHIRPS.merge(Xarray_Meteorological_station)
output[]: MergeError: conflicting values for variable 'precipitation' on objects to be combined:
# Attemp 3:
input[]: final = xr.combine_nested([ncin_rec, INMET_xarray])
output[]: AttributeError: module 'xarray' has no attribute 'combine_nested'
# Attempt 4: In here, I rename my original var according to the MergeError message from Attemp 2.
input[1]: Xarray_Meteorological_station.rename({'precipitation':'Precip_Station'})
input[2] : final = CHIRPS.merge(Xarray_Meteorological_station)
output[]: # this option worked just fine. Though I can't assign a new dimension to the concatenation, and requires from the user to pre-rename concurrent variables in common.
# Attemp 5:
input[]: final = xr.combine_by_coords([ncin_rec, INMET_xarray])
output[]: AttributeError: module 'xarray' has no attribute 'combine_by_coords'
# Attemp 6:
input[]: final = xr.auto_combine([ncin_rec, INMET_xarray], concat_dim=None)
output[]: MergeError: conflicting values for variable 'precipitation' on objects to be combined
# Attemp 7:
input[]: final = xr.auto_combine([ncin_rec, INMET_xarray], concat_dim='platform')
output[]: MergeError: conflicting values for variable 'precipitation' on objects to be combined
Несмотря на все мои усилия и все доступные варианты (кроме попытки 4), я не смог объединить два моих файла ('pandas dataframe)',' xarray DataArray ') с помощью методов xarray.
Если это возможно, может кто-нибудь объяснить различия между методами конкатенации в библиотеке Xarray и как я должен выполнять такой тип конкатенации по оси = 1?
В пандах все, что мне нужно было бы сделать, это что-то вроде:
final = df1.merge(df2, suffixes=('_CHIRPS', '_METEO_STATION')
Я благодарю вас за ваше время и надеюсь услышать от вас скоро.
С уважением,
Филипп Рискалла Лил