2012-12-26 54 views
11

聖誕快樂。我仍然對Python和熊貓非常新,所以幫助表示讚賞。
我想讀取一個netCDF文件,我可以做,然後將其導入熊貓數據框。 netcDF文件是2D的,所以我只是想'轉儲它'。我嘗試過DataFrame方法,但它不能識別該對象。據推測我需要將netCDF對象轉換爲2D numpy數組?再次感謝任何想法,以最好的方式來做到這一點。 最好的祝願 傑森將netCDF文件導入熊貓數據框

回答

2

你可以使用像PyNIO這樣的庫來將你的文件讀入p.e. numpy數組並將它們提供給熊貓。
PyNIO允許讀取幾種文件格式,包括傳統的netCDF3和netCDF4。
netcdf4-python也可以讀取這些的netCDF格式,併兼容py3.3

11

如果netCDF文件(或OPeNDAP數據集)如下CF元數據規範,你可以通過使用NetCDF4-Python package,這使得熊貓訪問它們真正利用這些優勢簡單。 (我使用Enthought Python Distribution,包括Pandas和NetCDF4-Python)。

在下面的示例中,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) 

的結果可以在這裏看到在IPython的筆記本: http://nbviewer.ipython.org/4615153/

13

xarray庫處理任意維度的netCDF數據,並保留元數據。 Xarray提供開放的netCDF文件,並將其轉換爲大熊貓dataframes的簡單方法:

import xarray as xr 

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

這將創建一個數據幀具有多指標與所有在它的尺寸。不幸的是,Pandas不支持任意的元數據,所以在轉換中會丟失,但你可以保留ds,並使用它的元數據。

+1

xray現在是xarray:http://xarray.pydata.org/en/stable/ –

+2

謝謝@DaveX,更新。 – naught101