【问题标题】:Gridding Pandas DataFrame to Multi-Dimensional Xarray Dataset?将 Pandas DataFrame 网格化为多维 Xarray 数据集?
【发布时间】:2021-10-26 22:17:37
【问题描述】:

有没有办法在不使用循环的情况下将“行格式”数据集网格化为 xarray 数据集?

具体来说,如果没有指定值,我想要一个数组,其中 (lat, lon, time) 网格中的所有值都为 0。我知道 pandas 中的 .to_xarray() 方法(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_xarray.html),但这不会产生所需坐标(纬度、经度、时间)的完整覆盖。下面的玩具示例:

import pandas as pd
import xarray as xr 

# row data to be gridded
data = {'lats':[0,0,2], 'lons':[1,2,0], 'times':[0,1,2], 'values':[20,50,30]}
df_rows = pd.DataFrame(data)
# desired coordinates to grid onto:
lat = [0,1,2]
lon = [0,1,2]
time= [0,1,2]
# general form of the desired output Dataset
df_grid = xr.Dataset(data_vars={'data':(('lon','lat','time'), df_rows)},
                     coords={'lat': lat,
                             'lon': lon,
                             'time':time})

【问题讨论】:

    标签: python dataframe python-xarray


    【解决方案1】:

    xr.Dataset.from_dataframe 的方法可以做到:

    import pandas as pd
    import xarray as xr
    
    # row data to be gridded
    data = {"lat": [0, 0, 2], "lon": [1, 2, 0], "time": [0, 1, 2], "values": [20, 50, 30]}
    df_rows = pd.DataFrame(data).set_index(["time", "lon", "lat"])
    
    ds = xr.Dataset.from_dataframe(df_rows)
    

    ds 是一个xarray.Dataset,具有三个维度/坐标和一个变量values,它是一个3x3x2 的数据块。

    timelonlat 设置为df_rows 中的索引是必不可少的,因为这些列将被理解为坐标。

    请注意,对于未指定 values 的坐标元组,此方法将使用 nan 填充变量 values

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 1970-01-01
      • 2018-05-22
      • 2021-06-14
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      相关资源
      最近更新 更多