微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python中的一个数据集中按多个经度和纬度组合数据数组

如何解决如何在python中的一个数据集中按多个经度和纬度组合数据数组

我对每个长/纬度点的数据数组进行循环,并将所有结果附加到一个列表中,如下所示:

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)

和我的列表如下:

enter image description here

你可以看到有很多数组,每个数组都有 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)
        tmax = base + 10 + 3 * np.random.randn(annual_cycle.size,1)

        ds.append(xr.Dataset(
            {
                "tmin": (("time","latitude","longitude"),tmin),"tmax": (("time",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,longitude) float64 8.436 1.992 ... 3.366 1.605,<xarray.Dataset>
 Dimensions:    (latitude: 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,longitude) float64 -2.966 -3.322 ... -7.731
     tmax       (time,longitude) float64 3.156 5.467 ... 11.85 7.26,<xarray.Dataset>
.
.
.
.
]

然后,在合并之后,它将是一个 xarray.dataset 就像这样:

repr

请告诉我这是否有帮助,或者我是否需要以某种方式适应您的特定类型的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。