Ich habe eine Reihe von monatlich gerasterten Datensätzen in CSV-Form. Ich möchte sie lesen, ein paar Dimensionen hinzufügen und dann an netcdf schreiben. Ich hatte große Erfahrung mit Xarray (Xray) in der Vergangenheit, so dachte ich, wenn ich für diese Aufgabe verwenden würde.Hinzufügen einer 'konstanten' Dimension zum Xarray-Datensatz
Ich kann sie leicht in eine 2D-Dataarray mit so etwas wie erhalten:
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)
Aber wenn ich versuche, eine neue Dimension hinzufügen, die Informationen über Zeit vermitteln würde (alle Daten aus dem gleichen Jahr/Monat) Dinge beginnen sauer zu werden.
ich zwei Möglichkeiten habe versucht, diese zu knacken:
1) meine Eingangsdaten erweitern 1 bis mxnx, so etwas wie:
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]
Dann folge ich die gleichen Schritte wie oben, mit coords aktualisiert eine dritte Dimension enthalten.
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')
Das ist in Ordnung ein Dataarray für die Erstellung - aber wenn ich zu einem Datensatz zu konvertieren versuchen (so kann ich zu netCDF schreiben), habe ich einen Fehler zu bekommen ‚Valueerror: Koordinaten Objekte 1-dimensional sein muss‘
2) Der zweite Ansatz, den ich ausprobiert habe, besteht darin, mein Datenarray in einen Datenframe umzuwandeln, den Index auf ['lat', 'lng', 'time'] zu setzen und dann zu einem Datensatz mit xr.Dataset.from_dataframe()
zurückzukehren . Ich habe es versucht - aber es dauert 20+ Minuten, bevor ich den Prozess abbringe.
Weiß jemand, wie ich ein Dataset mit einer monatlichen 'Zeit'-Dimension bekommen kann?
Danke für die Frage. Wenn Sie vollständig reproduzierbare Beispiele veröffentlichen können, ist es ein wenig einfacher, sich darauf einzulassen. Ich werde später einen Blick in beide Richtungen werfen, aber – Maximilian
@Maximilian machte ein paar Änderungen, um Copy/Paste zu unterstützen - ich stelle nicht oft Fragen hier, so würde jede weitere Änderungen/Stiländerungen, die Sie denken, könnte helfen. – badgley
Stephen gab die ideale Antwort, also werde ich nicht versuchen, es zu schlagen. Vielen Dank für die Änderungen, viel besser ... Wenn Sie wirklich eine andere Verfeinerung für die Zukunft wünschen, könnten Ihre Codezeilen in Blöcken sein (beachten Sie, wie Stephan sie unten tut) – Maximilian