繁体   English   中英

如何将具有不规则坐标的 Pandas Dataframe 转换为 xarray 数据集

[英]How to transform a Pandas Dataframe with irregular coordinates into a xarray Dataset

我正在使用88276531512388 python上的881531512388 Dataframe,但为了到达plot,为map我必须将其转换为Xarray DataSet的map,我必须将其转换为Xarray Dataaset883838383。我遇到的问题是我的数据网格不规则,所以我似乎无法创建数据集。

我的Dataframe有纬度和经度,以及每个点的值:

              lon        lat      value
0     -104.936302 -51.339233   7.908411
1     -104.827377 -51.127686   7.969049
2     -104.719154 -50.915470   8.036676
3     -104.611641 -50.702595   8.096765
4     -104.504814 -50.489056   8.163690
...           ...        ...        ...
65995  -32.911377  15.359591  25.475702
65996  -32.957718  15.579139  25.443994
65997  -33.004040  15.798100  25.429346
65998  -33.050335  16.016472  25.408105
65999  -33.096611  16.234255  25.383844

[66000 rows x 3 columns]

为了使用 lat 和 lon 作为坐标创建数据集并用NaN填充所有缺失值,我尝试了以下操作:

ds = xr.Dataset({
    'ts': xr.DataArray(
                data   = value,   # enter data here
                dims   = ['lon','lat'],
                coords = {'lon': lon, 'lat':lat},
                attrs  = {
                    '_FillValue': np.nan,
                    'units'     : 'K'
                    }
                )},
        attrs = {'attr': 'RegCM output'}
    )
ds

但我收到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [41], in <cell line: 1>()
      1 ds = xr.Dataset({
----> 2     'ts': xr.DataArray(
      3                 data   = value,   # enter data here
      4                 dims   = ['lon','lat'],
      5                 coords = {'lon': lon, 'lat':lat},
      6                 attrs  = {
      7                     '_FillValue': np.nan,
      8                     'units'     : 'K'
      9                     }
     10                 )},
     11         attrs = {'example_attr': 'this is a global attribute'}
     12     )
     14 # ds = xr.Dataset(
     15 #     data_vars=dict(
     16 #         variable=(["lon", "lat"], value)
   (...)
     25 #                      }
     26 # )
     27 ds

File ~\anaconda3\lib\site-packages\xarray\core\dataarray.py:406, in DataArray.__init__(self, data, coords, dims, name, attrs, indexes, fastpath)
    404 data = _check_data_shape(data, coords, dims)
    405 data = as_compatible_data(data)
--> 406 coords, dims = _infer_coords_and_dims(data.shape, coords, dims)
    407 variable = Variable(dims, data, attrs, fastpath=True)
    408 indexes = dict(
    409     _extract_indexes_from_coords(coords)
    410 )  # needed for to_dataset

File ~\anaconda3\lib\site-packages\xarray\core\dataarray.py:123, in _infer_coords_and_dims(shape, coords, dims)
    121     dims = tuple(dims)
    122 elif len(dims) != len(shape):
--> 123     raise ValueError(
    124         "different number of dimensions on data "
    125         f"and dims: {len(shape)} vs {len(dims)}"
    126     )
    127 else:
    128     for d in dims:

ValueError: different number of dimensions on data and dims: 1 vs 2

我真的很感激任何解决这个问题的见解。

如果你真的需要一个矩形网格化的数据集,你需要将你的数据重新采样到一个规则的网格中......( rasteriopyresample等为此提供了有用的功能)。 但是如果你只是想要 plot 的数据,这就没有必要了!

不确定 salem(到目前为止从未使用过),但我已尽力简化我正在开发EOmaps的可视化库中不规则采样数据的绘制!

如果您使用“delaunay 三角剖分”来可视化数据,您可以获得类似外观的“等值线图”:

import pandas as pd
df = pd.read_csv("... path-to df.csv ...", index_col=0)

from eomaps import Maps

m = Maps()
m.add_feature.preset.coastline()
m.set_data(df, x="lon", y="lat", crs=4326, parameter="value")
m.set_shape.delaunay_triangulation()
m.plot_map()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM