如何在 python 中的一个数据集中按多个经度和纬度组合数据数组
How to combine data arrays by multi longitude and latitude in one dataset in python
我对每个 long/lat 点的数据数组进行了循环,并将所有结果附加到一个列表中,如下所示:
out_list=[]
for i in ds.longitude.values:
for j in ds.latitude.values:
point = arr.sel(longitude=i,latitude=j)
p_detrend = sm.tsa.tsatools.detrend(point, order=1,axis=0)
out_list.append(p_detrend)
我的清单如下:
你可以看到有很多数组,每个数组都有 long/lat 。如何按经纬度合并一个数据集中的所有数组?
也许你可以改用字典,比如:
out_list = []
for i in ds.longitude.values:
for j in ds.latitude.values:
point = arr.sel(longitude=i,latitude=j)
p_detrend = sm.tsa.tsatools.detrend(point, order=1,axis=0)
result = {
'longitude': i,
'latitude': j,
'detrend_arr': p_detrend
}
out_list.append(result)
那你可以用pandas转换成pd.DataFrame
做其他操作;
如果使用 xarray.merge()
会怎样?
我使用 documentation 中的示例和您的描述为不同的经度和纬度创建了一个假数据,所有数据都堆叠在一个列表中。
然后,如果我使用xarray.merge()
,它会自动将数据结构化为('time','longitude','latitude')
xarray对象。
import numpy as np
import pandas as pd
import xarray as xr
np.random.seed(123)
xr.set_options(display_style="html")
times = pd.date_range("2000-01-01", "2001-12-31", name="time")
annual_cycle = np.sin(2 * np.pi * (times.dayofyear.values / 365.25 - 0.28))
ds = []
for lon in range(-40,-30):
for lat in range(0,10):
base = 10 + 15 * annual_cycle.reshape(-1,1,1)
tmin = base + 3 * np.random.randn(annual_cycle.size,1,1)
tmax = base + 10 + 3 * np.random.randn(annual_cycle.size,1,1)
ds.append(xr.Dataset(
{
"tmin": (("time", "latitude","longitude"), tmin),
"tmax": (("time", "latitude","longitude"), tmax),
},
{"time": times,"latitude":[lat],"longitude":[lon]},
))
ds = xr.merge(ds)
首先,ds
将类似于每个纬度和经度的不同 xarray
对象的列表:
[<xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, time: 731)
Coordinates:
* time (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2001-12-31
* latitude (latitude) int64 0
* longitude (longitude) int64 -40
Data variables:
tmin (time, latitude, longitude) float64 -4.646 -3.527 ... -3.939
tmax (time, latitude, longitude) float64 8.436 1.992 ... 3.366 1.605,
<xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, time: 731)
Coordinates:
* time (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2001-12-31
* latitude (latitude) int64 1
* longitude (longitude) int64 -40
Data variables:
tmin (time, latitude, longitude) float64 -2.966 -3.322 ... -7.731
tmax (time, latitude, longitude) float64 3.156 5.467 ... 11.85 7.26,
<xarray.Dataset>
.
.
.
.
]
那么,合并之后就是一个xarray.dataset
,就像这样:
请告诉我这是否有帮助,或者我是否需要以某种方式进行调整以适应您的特定类型的数据。
我对每个 long/lat 点的数据数组进行了循环,并将所有结果附加到一个列表中,如下所示:
out_list=[]
for i in ds.longitude.values:
for j in ds.latitude.values:
point = arr.sel(longitude=i,latitude=j)
p_detrend = sm.tsa.tsatools.detrend(point, order=1,axis=0)
out_list.append(p_detrend)
我的清单如下:
也许你可以改用字典,比如:
out_list = []
for i in ds.longitude.values:
for j in ds.latitude.values:
point = arr.sel(longitude=i,latitude=j)
p_detrend = sm.tsa.tsatools.detrend(point, order=1,axis=0)
result = {
'longitude': i,
'latitude': j,
'detrend_arr': p_detrend
}
out_list.append(result)
那你可以用pandas转换成pd.DataFrame
做其他操作;
如果使用 xarray.merge()
会怎样?
我使用 documentation 中的示例和您的描述为不同的经度和纬度创建了一个假数据,所有数据都堆叠在一个列表中。
然后,如果我使用xarray.merge()
,它会自动将数据结构化为('time','longitude','latitude')
xarray对象。
import numpy as np
import pandas as pd
import xarray as xr
np.random.seed(123)
xr.set_options(display_style="html")
times = pd.date_range("2000-01-01", "2001-12-31", name="time")
annual_cycle = np.sin(2 * np.pi * (times.dayofyear.values / 365.25 - 0.28))
ds = []
for lon in range(-40,-30):
for lat in range(0,10):
base = 10 + 15 * annual_cycle.reshape(-1,1,1)
tmin = base + 3 * np.random.randn(annual_cycle.size,1,1)
tmax = base + 10 + 3 * np.random.randn(annual_cycle.size,1,1)
ds.append(xr.Dataset(
{
"tmin": (("time", "latitude","longitude"), tmin),
"tmax": (("time", "latitude","longitude"), tmax),
},
{"time": times,"latitude":[lat],"longitude":[lon]},
))
ds = xr.merge(ds)
首先,ds
将类似于每个纬度和经度的不同 xarray
对象的列表:
[<xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, time: 731)
Coordinates:
* time (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2001-12-31
* latitude (latitude) int64 0
* longitude (longitude) int64 -40
Data variables:
tmin (time, latitude, longitude) float64 -4.646 -3.527 ... -3.939
tmax (time, latitude, longitude) float64 8.436 1.992 ... 3.366 1.605,
<xarray.Dataset>
Dimensions: (latitude: 1, longitude: 1, time: 731)
Coordinates:
* time (time) datetime64[ns] 2000-01-01 2000-01-02 ... 2001-12-31
* latitude (latitude) int64 1
* longitude (longitude) int64 -40
Data variables:
tmin (time, latitude, longitude) float64 -2.966 -3.322 ... -7.731
tmax (time, latitude, longitude) float64 3.156 5.467 ... 11.85 7.26,
<xarray.Dataset>
.
.
.
.
]
那么,合并之后就是一个xarray.dataset
,就像这样:
请告诉我这是否有帮助,或者我是否需要以某种方式进行调整以适应您的特定类型的数据。