web-dev-qa-db-ja.com

netCDFファイルをPandasデータフレームにインポートします

メリークリスマス!私はまだPythonとPandasに慣れていないので、助けていただければ幸いです。netCDFファイルを読み込んで、それをPandasデータフレーム。netcDFファイルは2Dなので、「ダンプイン」したいだけです。DataFrameメソッドを試しましたが、オブジェクトを認識しません。おそらく、netCDFオブジェクトを2Dnumpyに変換する必要があります。アレイ?繰り返しますが、これを行うための最良の方法に関するアイデアに感謝します。

19
user1911866

xarray ライブラリは、任意の次元のnetCDFデータを処理し、メタデータを保持します。 Xarrayは、netCDFファイルを開き、それらをpandas dataframes:

import xarray as xr

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

これにより、すべてのディメンションを含む多重指数を持つデータフレームが作成されます。残念ながら、Pandasは任意のメタデータをサポートしていないため、変換で失われますが、dsを維持し、そこからのメタデータを使用できます。

19
naught101

NetCDFファイル(または OPeNDAP データセット)がCFメタデータの規則に従っている場合は、 NetCDF4-Python package 、Pandasでそれらにアクセスするのは本当に簡単です。(私はEnthought Pythonディストリビューションの両方を含む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 Notebookで確認できます: http://nbviewer.ipython.org/4615153/

12
Rich Signell

PyNIOなどのライブラリを使用して、ファイルをp.eに読み込むことができます。 numpy配列をパンダに送ります。
PyNIO 従来のnetCDF3やnetCDF4を含むいくつかのファイル形式を読み取ることができます。
netcdf4-python これらのnetCDF形式も読み取ることができ、py3.3と互換性があります

2
joaquin