使用 xarray 选择所有坐标值
Posted
技术标签:
【中文标题】使用 xarray 选择所有坐标值【英文标题】:Selecting the All Coordinate values using xarray 【发布时间】:2022-01-13 01:59:29 【问题描述】:我正在使用 xarray 从 netcdf 文件中读取数据。
我正在将任何给定数据变量的数据导出为 CSV 格式。
这是一个示例数据变量
stratiform_snowfall_rate (time, grid_latitude, grid_longitude) float32
Dimensions = ('time', 'grid_latitude', 'grid_longitude')
No.of Dimensions = 3
DataType = float32
Shape = (36, 548, 421)
我可以从 DataArray 中获取各个值。
但是,我希望每个坐标都有一组唯一的值。
即我想要我拥有 snowfall_rate 数据的所有纬度经度和时间值。
应该有 36 个唯一时间值、548 个纬度值和 421 个经度值。
谢谢 萨提什
【问题讨论】:
ds.to_dataframe().to_csv(filepath)
工作吗?
嗨 Machael,如果有多个变量,不确定 to_csv() 将如何存储。我希望每个变量都存储在单独的 csv 文件中,并且当我尝试将其保存为 csv 时,我收到 Memory Error:numpy.core._exceptions.MemoryError: Unable to allocate 19.8 PiB for an array with shape (36, 548 , 421, 3, 3, 3, 2, 2, 3, 3, 421, 547, 3) 和数据类型 float32。
您能否在问题中完整描述您要解决的问题?请注意,您可以遍历ds.data_vars
中的变量并执行ds[v].to_series().to_frame(name=v).to_csv()
。也就是说,是的,csv 不是存储高维数据的好格式,最好将数据保留为 netcdf。
请注意,to_dataframe() 将在一个数据集中存储多个变量,但数据集中的所有数组将首先相互广播,然后堆叠。所以这不适用于具有非均匀维度的数组。这可能会导致您看到的数组分配错误的大小爆炸。
Michael,我正在尝试获取给定数据变量的唯一坐标集。因为我试图将给定数据变量的数据连同坐标一起存储在它自己的 csv/parquet 文件中,并最终存储在一个 db 表中。
【参考方案1】:
谢谢大家。我可以读取坐标值。
这是一个示例:
dataArray = xr.DataArray(
np.random.randn(4, 6),
dims=("x", "y"),
coords=
"x": [-3.2, 2.1, 5.3, 6.5],
"y": pd.date_range("2009-01-05", periods=6, freq="M"),
,
)
for i in range(len(dataArray.x)):
for j in range(len(dataArray.y)):
rowDict =
rowDict['x'] = dataArray.coords['x'].values[i]
rowDict['y'] = pd.to_datetime(str(dataArray.coords['y'].values[j])).strftime('%Y.%m.%d %H.%M.%S')
rowDict['val'] = dataArray.data[i, j]
print(rowDict)
我得到的输出是:
'x': -3.2, 'y': '2009.01.31 00.00.00', 'val': 1.1672918170123077
'x': -3.2, 'y': '2009.02.28 00.00.00', 'val': -0.45000573967001745
'x': -3.2, 'y': '2009.03.31 00.00.00', 'val': -0.3070507637309568
'x': -3.2, 'y': '2009.04.30 00.00.00', 'val': -0.16715901864646582
'x': -3.2, 'y': '2009.05.31 00.00.00', 'val': 1.6700002681882784
'x': -3.2, 'y': '2009.06.30 00.00.00', 'val': 0.2303405222447574
'x': 2.1, 'y': '2009.01.31 00.00.00', 'val': -0.10394183859025365
'x': 2.1, 'y': '2009.02.28 00.00.00', 'val': -0.6399654408544677
'x': 2.1, 'y': '2009.03.31 00.00.00', 'val': -0.7322155474326156
'x': 2.1, 'y': '2009.04.30 00.00.00', 'val': 0.4443732649765692
'x': 2.1, 'y': '2009.05.31 00.00.00', 'val': 0.32141177764826817
'x': 2.1, 'y': '2009.06.30 00.00.00', 'val': 0.990286185910961
'x': 5.3, 'y': '2009.01.31 00.00.00', 'val': -1.0176437927897097
'x': 5.3, 'y': '2009.02.28 00.00.00', 'val': -0.23011079013897445
'x': 5.3, 'y': '2009.03.31 00.00.00', 'val': -0.17623947662095518
'x': 5.3, 'y': '2009.04.30 00.00.00', 'val': -1.567830106123095
'x': 5.3, 'y': '2009.05.31 00.00.00', 'val': 0.3510704631729717
'x': 5.3, 'y': '2009.06.30 00.00.00', 'val': -1.619554124545969
'x': 6.5, 'y': '2009.01.31 00.00.00', 'val': -0.7614693432763142
'x': 6.5, 'y': '2009.02.28 00.00.00', 'val': 1.1021880682514598
'x': 6.5, 'y': '2009.03.31 00.00.00', 'val': -0.9944031641204935
'x': 6.5, 'y': '2009.04.30 00.00.00', 'val': 0.4910807257668136
'x': 6.5, 'y': '2009.05.31 00.00.00', 'val': 1.5922216407449592
'x': 6.5, 'y': '2009.06.30 00.00.00', 'val': -0.41559207408354637
【讨论】:
以上是关于使用 xarray 选择所有坐标值的主要内容,如果未能解决你的问题,请参考以下文章
求助大神,怎么去掉echarts中y轴,但是保留y轴坐标值和网格线