Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将netCDF文件导入数据帧_Python_Dataframe_Pandas_Netcdf - Fatal编程技术网

Python 将netCDF文件导入数据帧

Python 将netCDF文件导入数据帧,python,dataframe,pandas,netcdf,Python,Dataframe,Pandas,Netcdf,圣诞快乐!我对蟒蛇和熊猫还很陌生,所以非常感谢您的帮助。我试图读入一个netCDF文件,我可以这样做,然后将其导入到一个数据帧中。netcDF文件是2D文件,所以我只想“将其转储”。我尝试了DataFrame方法,但它无法识别对象。大概我需要将netCDF对象转换为2D numpy数组?再次感谢您提出的最佳方法。您可以使用类似PyNIO的库将文件读入p.e.numpy数组,并将其馈送给pandas。 允许读取多种文件格式,包括经典的netCDF3和netCDF4。 还可以读取这些netCDF格式

圣诞快乐!我对蟒蛇和熊猫还很陌生,所以非常感谢您的帮助。我试图读入一个netCDF文件,我可以这样做,然后将其导入到一个数据帧中。netcDF文件是2D文件,所以我只想“将其转储”。我尝试了DataFrame方法,但它无法识别对象。大概我需要将netCDF对象转换为2D numpy数组?再次感谢您提出的最佳方法。

您可以使用类似PyNIO的库将文件读入p.e.numpy数组,并将其馈送给pandas。
允许读取多种文件格式,包括经典的netCDF3和netCDF4。
还可以读取这些netCDF格式,并且与py3.3兼容

如果您的netCDF文件(或数据集)遵循CF元数据约定,您可以使用来利用它们,这使得在Pandas中访问它们非常容易。(我使用的是Enthound Python发行版,其中包括Pandas和NetCDF4 Python)

在下面的示例中,NetCDF文件是通过OPeNDAP提供的,NetCDF4 Python库允许您打开远程OPeNDAP数据集并使用它,就像它是本地NetCDF文件一样,这非常灵活。如果要查看NetCDF4文件的属性,请将浏览器指向此链接

您应该能够在不做任何更改的情况下运行此操作:

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笔记本中看到:

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

import xarray as xr

ds = xr.open_dataset('/path/to/netcdf')
df = ds.to_dataframe()
这将创建一个具有多索引的数据框架,其中包含所有维度。不幸的是,Pandas不支持任意元数据,因此在转换过程中会丢失,但您可以保留
ds
,并使用其中的元数据