Seite 1 von 1

Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 04:51
von ChrisKR
Hallo Leute,

meine erste Frage auf diesem Forum, dass mir ja schon so sehr geholfen hat. Aber Fokus auf das Problem. :D

Meine Frage ist recht simpel jedoch finde ich bis jetzt noch nicht die Lösung. Ich habe eine kleine Excel Tabelle angelegt und möchte nun einen Wert in dieser Tabelle verändern, wie mache ich das? Wichtig ist, dass ich danach mit diesen Zahlen weiterarbeiten kann.

df.at[2,0] = 10 --> das habe ich Probiert aber sehr erfolglos, und auch sonst habe ich nicht viel gefunden.

Sorry für so eine simple Frage aber ich stehe auf dem Schlauch und habe noch nie mit Pandas gearbeitet.

Re: Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 09:13
von einfachTobi
df.at[... klingt nach einem DataFrame. Das hat nichts mit Excel zu tun. Wenn du das aus einer Exceldatei erzeugt hast, ergeben Änderungen im DataFrame nicht gleichzeitig Änderungen in der ursprünglichen Datei. Sollte das der Fall sein und du willst das (veränderte) DataFrame so speichern, wie du es eingelesen hast, kannst du to_excel verwenden. Ansonsten schau dir openpyxl an.

Um einen einzelnen Wert in einem DataFrame zu ändern kannst du .at() oder .iat() verwenden. Bei .at() werden die die Zeilen und Spalten jedoch über ihr Label angesprochen, während .iat() die Indices verwendet.
Zum Beispeil

Code: Alles auswählen

>>> df 
    A B C
 4 0 2 3 
 5 0 4 1
 6 10 20 30
 
 >>> df.at[4, 'B']
 2
 
 >>> df.iat[1, 2]
 1

Re: Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 09:57
von ChrisKR
Vielen Dank für die Erklärung hat mir sehr weitergeholfen!

Re: Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 11:03
von ChrisKR
def Buchen_Eco1():
Plätze = PlätzeEco1.get()
df.columns
df.iat[2,0] = int(df.iat[2,0]) - Plätze
if df.iat[2,0] >=0:
df.to_csv(index=False)
Label(screen2, text = "Platzt gebucht!", fg ="blue").pack()
else:
df.iat[2,0] = int(df.iat[2,0]) + Plätze
Label(screen2, text="Es sind nicht mehr genug Plätze verfügbar.", fg ="blue").pack()

Ich habe gedacht es würde so funktionieren, aber leider ändern sich die Werte in der Excel-Tabelle nicht...könntet ihr mir da Helfen?
Ist df.to_csv(index=False) nicht richtig? Und was bedeutet index=False?
Edit: Das Programm läuft trotzdem durch es gibt keinen traceback, nur wie beschrieben überträgt der wert sich nicht in meine Tabelle.

Re: Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 11:12
von Sirius3
Hast Du Dir die Dokumentation zu to_csv angeschaut, was das macht? Dann sollte klar sein, dass sich da nichts an irgendwelchen Dateien auf magische Weise ändert. `df` weiß ja nicht, dass es ürsprünglich mal aus einer Datei generiert worden ist.

Labels sollten nur bei der Erzeugung des Fensters angelegt werden und nicht später. In einer Methode kannst Du den Text des schon angelegten Labels ändern. Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Buchen_Eco1 hat aber gar keine, es fehlen `df`, `PlätzeEco1`, screen2`. Daher ist auch jedes nicht triviale GUI-Programm ohne Klassen nicht sauber umsetzbar. Benutze keine *-Importe. Das 1 an Eco1 läßt befürchten, dass es noch ähnliche Methoden mit anderen Ziffern gibt. Sowas macht man auch nicht, sondern versucht, allgemeine Methoden zu schreiben.

Re: Wert einer Zelle Ändern (Pandas/Excel/Python)

Verfasst: Donnerstag 26. Dezember 2019, 14:12
von ChrisKR
Danke für die Kritik, jedoch ist das als Anfänger alles gar nicht so leicht und irgendwie muss man ja anfangen.