将netCDF文件导入Pandas框架

tktrz96b  于 7个月前  发布在  Etcd
关注(0)|答案(3)|浏览(78)

圣诞快乐!我对Python和Pandas还很陌生,所以任何帮助都很感激。我试图读入一个netCDF文件,我可以这样做,然后将其导入到Pandas Dataframe中。netCDF文件是2D的,所以我只是想“转储”。我已经尝试了DataFrame方法,但它不识别对象。大概我需要将netCDF对象转换为2D numpy数组?再次感谢任何关于最佳方法的想法。

ogq8wdun

ogq8wdun1#

xarray库处理任意维的netCDF数据,并保留元数据。Xarray提供了一种打开netCDF文件并将其转换为pandas框架的简单方法:

import xarray as xr

ds = xr.open_dataset('/path/to/netcdf')
df = ds.to_dataframe()

字符串
这将创建一个包含所有维度的多索引的框架。不幸的是,Pandas不支持任意元数据,因此在转换过程中会丢失,但您可以保留ds,并使用其中的元数据。

soat7uwm

soat7uwm2#

如果你的NetCDF文件(或OPeNDAP数据集)遵循CF元数据约定,你可以通过使用NetCDF4-Python package来利用它们,这使得在Pandas中访问它们非常容易。(我使用的是Enthought Python Distribution,其中包括Pandas和NetCDF 4-Python)。
在下面的示例中,NetCDF文件是通过OPeNDAP提供的,NetCDF 4-Python库允许您打开和处理远程OPeNDAP数据集,就像它是一个本地NetCDF文件一样,这非常灵活。如果您想查看NetCDF 4文件的属性,请将浏览器指向此链接http://geoport-dev.whoi.edu/thredds/dodsC/HUDSON_SVALLEY/5951adc-a1h.nc.html
您应该能够在不进行更改的情况下运行此命令:

from matplotlib import pyplot as plt
import pandas as pd
import netCDF4

url='http://geoport-dev.whoi.edu/thredds/dodsC/HUDSON_SVALLEY/5951adc-a1h.nc'
vname = 'Tx_1211'
station = 0

nc = netCDF4.Dataset(url)
h = nc.variables[vname]
times = nc.variables['time']
jd = netCDF4.num2date(times[:],times.units)
hs = pd.Series(h[:,station],index=jd)

fig = plt.figure(figsize=(12,4))
ax = fig.add_subplot(111)
hs.plot(ax=ax,title='%s at %s' % (h.long_name,nc.id))
ax.set_ylabel(h.units)

字符串
结果可以在Ipython Notebook中看到:http://nbviewer.ipython.org/4615153/

iq0todco

iq0todco3#

你可以使用像PyNIO这样的库将你的文件读入p.e. numpy数组,并将它们提供给pandas。
PyNIO允许阅读多种文件格式,包括经典的netCDF 3和netCDF 4。
netcdf4-python也可以读取这些netCDF格式,并且与py3.3兼容

相关问题