Zusammenfügen von DataFrames mit Pandas?
Hallo Zusammen,
ich habe folgende DataFrames:
points = pd.DataFrame(
{
'Costs in million €/a': [11, 12, 13],
'CO2-emissions in t/a': [17000, 14000, 16000],
'Name': ['Ben', 'Timo', 'Marco']
}
)
new_values = pd.DataFrame(
{
'Costs in million €/a': annual_costs,
'CO2-emissions in t/a': annual_emissions,
'Name': input_values_dict["input_name"]
}
)
Die Werte für annual_costs und annual_emissions werden berechnet und ich bekomme input_values_dict["input_name"] als input.
Ich möchte jetzt beide DataFrames zusammenfügen und mir später mit Streamlit als Graph anzeigen lassen.
Das Problem ist, dass die Werte für new_values immer überschrieben werden, wenn ich die beiden DataFrames kombiniere oder new-values zu points hinzufüge.
Ich habe schon pd.concat und points.append ausprobiert, komme aber immer wieder auf das gleiche Ergebnis: wenn ich neue Werte für new_values bekomme werden diese nicht einfach hinzugefügt sondern überschreiben die alten Werte von new_values.
Hat jemand eine Idee?
Viele Grüße
1 Antwort
Der Code, den du gezeigt hast, erstellt tatsächlich jedes Mal ein neues `new_values` DataFrame. Daher überschreibt er die vorherigen Werte nicht, sondern erstellt einfach ein neues DataFrame.
Wenn du die neuen Werte an das vorhandene DataFrame anhängen möchtest, musst du das DataFrame außerhalb des Codes erstellen, der die neuen Werte hinzufügt. Dann kannst du die `append` Funktion verwenden, um die neuen Werte hinzuzufügen, und den resultierenden DataFrame zu speichern.
Hier ist ein Beispiel:
```python
# Das DataFrame erstellen
points = pd.DataFrame(
{
'Costs in million €/a': [11, 12, 13],
'CO2-emissions in t/a': [17000, 14000, 16000],
'Name': ['Ben', 'Timo', 'Marco']
}
)
# Hier passiert irgendwas, was die Werte von annual_costs, annual_emissions, und input_name bestimmt
# ....
# Das neue DataFrame erstellen
new_values = pd.DataFrame(
{
'Costs in million €/a': [annual_costs],
'CO2-emissions in t/a': [annual_emissions],
'Name': [input_values_dict["input_name"]]
}
)
# Die neuen Werte hinzufügen
points = points.append(new_values, ignore_index=True)
```
Beachte, dass ich die Werte von `annual_costs`, `annual_emissions` und `input_name` in Listen umgewandelt habe. Das liegt daran, dass Pandas erwartet, dass die Werte für jede Spalte in einer Liste oder einem ähnlichen Container vorkommen.
Darüber hinaus ist es wichtig, das Ergebnis der `append`-Funktion zu speichern. Diese Funktion gibt einen neuen DataFrame zurück, der die kombinierten Daten enthält, anstatt den vorhandenen DataFrame zu ändern.
Schließlich erlaubt das `ignore_index=True` Argument, dass Pandas die Indizes für das resultierende DataFrame neu generiert, so dass es eine fortlaufende Numerierung von 0 bis n-1 gibt, wobei n die Gesamtzahl der Zeilen ist. Wenn du das nicht tust, behält jeder DataFrame seine ursprünglichen Indizes bei, was zu doppelten Indizes führen kann.