私はCSV形式の一連の月単位グリッドデータセットを用意しています。私はそれらを読んで、いくつかのディメンションを加えてから、netcdfに書きたいと思います。私は過去にxarray(xray)を使用して素晴らしい経験をしていましたので、もしこの仕事のために使うと思っていました。xarrayに 'constant'ディメンションを追加するデータセット
私は簡単のようなもので、2D DataArrayにそれらを取得することができます:
data = np.ones((360,720))
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
da = xr.DataArray(data, coords=coords)
をしかし、私は(すべてのデータは同じ年/月からです)時間についての情報を伝えるだろう別の次元を追加しようとすると、物事は酸っぱくなる。
私はこのクラックする二つの方法試してみた:COORDSを更新して
data = np.ones((360,720))
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
data = data[:,:,np.newaxis]
それから私は、上記と同じ手順に従います。のようなものは、1をmxnxために私の入力データを拡張)
1 3次元を含む
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
coords['time'] = pd.datetime(year, month, day))
da = xr.DataArray(data, coords=coords)
da.to_dataset(name='variable_name')
これはDataArrayを作成するための罰金です - しかし、私は(私はNetCDFファイルに書き込むことができます)データセットに変換しようとすると、私は約エラーが出る「とValueErrorを:オブジェクトは1次元でなければならない」座標
2)私が試みた2つ目のアプローチは、データ配列をデータフレームにキャストし、インデックスを[lat、lng]、[time]に設定してから、xr.Dataset.from_dataframe()
でデータセットに戻ります。私はこれを試しました - しかし、私はプロセスを殺す前に20 +分かかる。
毎月の「時間」ディメンションでデータセットを取得する方法を知っている人はいますか?
ありがとうございます。完全に再現可能な例を投稿することができれば、やりやすくすることができます。 – Maximilian
@Maximilianはコピー/ペーストをサポートするためにいくつかの編集を行いました - 私は頻繁にここで質問しませんので、それ以上の編集/スタイルの変更をお手伝いしていただければ幸いです。 – badgley
スティーブンは理想的な答えを出したので、私はそれを打ち負かそうとはしません。編集していただきありがとうございます...あなたが本当に将来のために別の改良をしたいのであれば、あなたのコードラインはブロックになる可能性があります(Stephanがそれらをどのようにしているかに注目してください) – Maximilian