将netCDF文件导入Pandas数据帧

use*_*866 15 python netcdf dataframe pandas

圣诞节快乐.我仍然是Python和熊猫的新手所以非常感谢帮助.
我试图读取netCDF文件,我可以做,然后将其导入到Pandas Dataframe中.netcDF文件是2D的,所以我只想"转储它".我已经尝试过DataFrame方法,但它无法识别该对象.大概我需要将netCDF对象转换为2D numpy数组?再次感谢有关最佳方法的任何想法.祝福杰森

nau*_*101 23

所述xarray库处理任意维NetCDF数据,并保持元数据.Xarray提供了一种打开netCDF文件并将其转换为pandas数据帧的简单方法:

import xarray as xr

ds = xr.open_dataset('/path/to/netcdf')
df = ds.to_dataframe()
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*ell 13

如果您的NetCDF文件(或OPeNDAP数据集)遵循CF元数据约定,您可以通过使用NetCDF4-Python package它来利用它们,这使得在Pandas中访问它们非常容易.(我正在使用包含Pandas和NetCDF4-Python的Enthought Python Distribution).

在下面的示例中,NetCDF文件通过OPeNDAP提供,NetCDF4-Python库允许您打开和使用远程OPeNDAP数据集,就像它是一个非常光滑的本地NetCDF文件一样.如果要查看NetCDF4文件的属性,请将浏览器指向此链接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)
Run Code Online (Sandbox Code Playgroud)

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


joa*_*uin 4

您可以使用 PyNIO 这样的库将文件读入 pe numpy 数组并将其提供给 pandas。
PyNIO允许读取多种文件格式,包括经典的 netCDF3 和 netCDF4。
netcdf4-python也可以读取这些 netCDF 格式并且兼容 py3.3