我正在尝试使用 CHESS-SCAPE 数据集(在这里找到 - https://data.ceda.ac.uk/badc/deposited2021/chess-scape/data/rcp60/01/monthly)来获取地面风使用 Python 在整个日期范围(1980-2080)内提高英国的速度。理想情况下,我想要每个网格点的每月速度数据。
该文件是一个NetCDF文件,我真的很难使用它。我已经尝试了很多方法,但为了简单起见,我将展示一个示例,说明我如何使用 Python 来访问数据的一部分:
import pandas as pd
import numpy as np
import xarray as xr
data = xr.open_dataset('chess-scape.nc', chunks={})
wind_speed = data['sfcWind']
df = pd.DataFrame(wind_speed.isel(time=1199).values)
df.to_csv('windspeed.csv')
data.close()
结果似乎是 csv 文件中的随机、零星值,因此我认为我没有正确访问数据。我尝试像这样直接访问值:
df = pd.DataFrame(wind_speed.values[1199])
但我认为在这个过程中整个数据集都被加载到内存中,因此 RAM 很快就会填满。生成的 CSV 文件示例:
我目前正在使用一个现有的数据集,它是一个 .dat 文件,我对如何从这个 NetCDF 获取数据以使其看起来像这个文件有点不知所措:
我意识到这个问题的措辞可能很糟糕,而且可能确实是错误的问题,所以此时任何方向将不胜感激。
你的方法没有任何问题。 我想,这种混乱来自于实际数据(英国上空的风速)被许多空网格点(海洋上空没有数据)包围。 如果将生成的 CSV 文件加载到 LibreOffice Calc(或 Excel)中并尽可能缩小,您将识别出英国颠倒的形状(泰晤士河河口位于单元格 VL 182 周围)。
使用 xarray,您可以在 Jupyter Lab 等交互式环境中使用
wind_speed.isel(time=1199).plot()
直观地检查提取的数据是否符合预期。
(如果您的 Python 环境不是交互式的,您还需要 import matplotlib.pyplot as plt
和 plt.show()
。)
那么,也许问题是:你真的需要以 CSV 格式保存数据吗?根据我的经验,在 xarray 中处理 NetCDF 数据最方便,因此我不会尝试对其进行转换,除非出于可视化目的。
作为旁注,我建议按如下方式编写代码(仅少几个字符):
import numpy as np
import xarray as xr
import pandas as pd
ds = xr.open_dataset('chess-scape.nc')
wind_speed = ds.sfcWind
df = pd.DataFrame(wind_speed.isel(time=1199))
df.to_csv('windspeed.csv')