使用 Python 将 NetCDF 文件转换为 CSV 或文本
Posted
技术标签:
【中文标题】使用 Python 将 NetCDF 文件转换为 CSV 或文本【英文标题】:Convert NetCDF file to CSV or text using Python 【发布时间】:2017-11-05 16:35:40 【问题描述】:我正在尝试使用 Python 将 netCDF 文件转换为 CSV 或文本文件。我已经阅读了this post,但我仍然缺少一步(我是 Python 新手)。它是一个包含纬度、经度、时间和降水数据的数据集。
这是我目前的代码:
import netCDF4
import pandas as pd
precip_nc_file = 'file_path'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]
我不知道如何从这里开始,但我知道这是用 pandas 创建数据框的问题。
【问题讨论】:
【参考方案1】:我认为pandas.Series
应该可以为您创建一个包含时间、纬度、经度、沉淀的 CSV。
import netCDF4
import pandas as pd
precip_nc_file = 'file_path'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]
# a pandas.Series designed for time series of a 2D lat,lon grid
precip_ts = pd.Series(precip, index=dtime)
precip_ts.to_csv('precip.csv',index=True, header=True)
【讨论】:
谢谢!!这是完美的 不客气。您应该接受未来读者的答案。【参考方案2】:import xarray as xr
nc = xr.open_dataset('file_path')
nc.precip.to_dataframe().to_csv('precip.csv')
【讨论】:
与所提出的问题相比,您能否更清楚地说明您编写此代码的原因?这段代码如何给出问题的答案? 流行的答案对我不起作用。我不知道为什么(也许我做错了什么?)。似乎 xarray 库以更少的代码行提供了解决方案。这种替代方法可能会为某些人节省时间,就像对我一样。 关于另一个不起作用的答案。我在标准 NOAA mslp netCDF 文件esrl.noaa.gov/psd/thredds/fileServer/Datasets/ncep.reanalysis2/… 上进行了尝试,并在最后第二行得到以下错误: >>> # 为 2D lat,lon 网格的时间序列设计的 pandas.Series ... precip_ts = pd.Series(precip, index=dtime) Traceback(最近一次调用最后):文件“根据你的要求,你或许可以使用 Numpy 的savetxt
方法:
import numpy as np
np.savetxt('lat.csv', lat, delimiter=',')
np.savetxt('lon.csv', lon, delimiter=',')
np.savetxt('precip.csv', precip, delimiter=',')
但是,这将输出没有任何标题或索引列的数据。
如果您确实需要这些功能,您可以构建一个 DataFrame 并将其保存为 CSV,如下所示:
df_lat = pd.DataFrame(data=lat, index=dtime)
df_lat.to_csv('lat.csv')
# and the same for `lon` and `precip`.
注意:在这里,我假设日期/时间索引沿数据的第一维运行。
【讨论】:
谢谢!不幸的是,这不起作用 - 我决定只提取我在其他数据集中使用的所有纬度和经度,然后循环获取每个地方的时间序列。就像我上面提供的链接一样。费时,但有效!以上是关于使用 Python 将 NetCDF 文件转换为 CSV 或文本的主要内容,如果未能解决你的问题,请参考以下文章