KeyError xArray

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FrankHavel
User
Beiträge: 1
Registriert: Samstag 6. November 2021, 09:37

Guten Morgen,

habe folgendes Problem:

Ich lese aus Excel Daten, wobei die ersten 7 Spalten jeweils einen Index darstellen, in ein xArray.

Beispiel:
--------------------------------
Year Category Fuel Segment Component Process Component_origin electricity natural_gas
2020 Passenger Cars Petrol Mini battery assembling DE 10000 0
2020 Passenger Cars Petrol Small battery assembling FR 10000 0
2020 Passenger Cars Electricity default battery assembling UK 10000 0
....
--------------------------------
my_process_energy_consumption_xr = xr.Dataset.from_dataframe(my_process_energy_consumption_df.set_index(['Year','Category','Fuel','Segment','Component','Process','Component_origin']))

Meine Berechnungen laufen über die Schleifen Category & Fuel & Segment & Process & Component_origin & die Energieträger
Auf einen einzelnen Wert greife ich mittels:

my_process_energy_integer = process_energy_xr.sel(Year = considered_data_year, Category =ite_categori, Fuel = ite_fuel,Segment = ite_segment, Component = ite_component, Process = ite_process, Component_origin=ite_component_origin)[ite_energy]

zu. Da ich ausschließen will, dass der Nutzer jeden Kombination aus Category & Fuel & Segment & Process & Component_origin in Excel parametrisieren muss (das werden im Zweifel hunderte), soll es 'defaults' geben.

Also zB

Year Category Fuel Segment Component Process Component_origin electricity natural_gas
2020 Passenger Cars Petrol Mini battery assembling default 10000 0

was dann für alle Länder "Component_origin" für die PKW "Passenger Cars Petrol Mini" gelten soll. Oder:

Year Category Fuel Segment Component Process Component_origin electricity natural_gas
2020 Passenger Cars Petrol default battery assembling DE 10000 0

was für alle Segmente (Größenklassen) der Petrol-PKW aus DE gelten soll.


Bisher habe ich das in anderen xArrays des Modells mit try / except bewerkstelligt, was bei höheren Dimensionen des xArray aber komplex und unschön ist.

Jetzt versuche ich es über keyerrors und habe hier (https://embeddedinventor.com/3-ways-to- ... in-python/) dazu die Anweisung "df.get('c', 'catwoman')" gefunden, die bei Fehlen des Index 'c' eine Wert zuweist.
Für mein xArray funktioniert das aber nicht.

Mache ich folgendes:
ite_fuel= process_energy_xr.get(ite_fuel, 'default')
ite_segment= process_energy_xr.get(ite_segment, 'default')
ite_component_origin = process_energy_xr.get(ite_component_origin, 'default')

setzt der Prozess für alle drei ite_fuel, ite_segment, ite_component_origin den Wert auf "default".
Ich verstehe auch nicht, ob das Konzept so Sinn ergibt, da ich ja eigentlich nur eine Dimension nach einem Key durchsuchen muss. während die anderen bereits feststehen. Wenn diese dann nicht vorhanden ist, dann soll "default" folgen.

Bin ein bisschen ratlos und für jede Hilfe dankbar!

Herzliche Grüße
Frank
Antworten