Seite 1 von 1

Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 11:28
von tmessers
Hallo liebe Python-Gemeinde,
ich habe hier ein Problem, über das ihr sicher schmunzeln werdet.
Ich habe folgenden DataFrame:

A B C D E F
10.12. 166.7 153 247.8 132.4 154.8 237.3
12.12. 146.8 156 273.2 142.7 169.6 253.8
13.12. 146.8 156 273.2 142.7 169.6 253.8
14.12. 166.7 158.6 291.8 144 192.8 276
15.12. 166.7 150.8 275.7 139.7 195.4 268.1
16.12. 166.7 150.8 275.7 139.7 195.4 268.1

Ich möchte den Wert in Zelle 16.12./A ermitteln.

So möchte ich das tun:

Code: Alles auswählen

# ——-Wert ermitteln
    i = len(df_graf)-1
    print (i)

    wert_a = int(df_graf.iloc[i][0])
    print (wert_a)
i wird korrekt mit 5 berechnet.

Ich bekomme bei der Ausführung folgenden Fehlermeldung:
"ValueError: invalid literal for int() with base 10: '166.7'"

Setzte ich i = i - 1, dann erfolgt ein fehlerfreier Durchlauf.

Ich kann mit das nicht erklären. Wo liegt mein Denkfehler oder was mache ich falsch?

Gruß

tmessers

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 11:50
von __deets__
Ist denn die Zahl 166.7 eine Ganzzahl?

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 12:39
von tmessers
Nein, ist sie nicht. Sie ist doch im DataFrame ein string, oder nicht?
Warum bekomme ich aber wenn ich i = i -1 setze, für wert_a = 166?
Mit int("166,7") wandle ich doch den String 166.7 in einen Integer um, oder liege ich hier falsch?

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 13:27
von einfachTobi
Der Werte dürfte eher ein numpy.float64 als ein String sein. Das solltest du für dich mal prüfen.
Wenn du jedoch ohnehin nur den letzten Wert haben willst, kannst du ihn auch mit -1 erhalten:

Code: Alles auswählen

print(df_graf.A.iloc[-1])
print(df_graf.iloc[-1][-1])

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 14:14
von __blackjack__
@tmessers: Offenbar hast Du da Zeichenketten in der Spalte stehen und das hat dann überhaupt gar nichts mit dem DateFrame zu tun, `int()` muss eine Zeichenkette bekommen mit einem Inhalt der eine ganze Zahl darstellt. "166.7" ist das nicht:

Code: Alles auswählen

In [128]: int("166.7")                                                          
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-128-40c50ccbffe6> in <module>
----> 1 int("166.7")

ValueError: invalid literal for int() with base 10: '166.7'
Die Frage die sich da aufdrängt ist natürlich warum das Zeichenketten sind in der Spalte‽

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 21:45
von tmessers
@einfachTobi: es ist definitiv ein string
Ich habe mein Problem so gelöst

dat= df_graf.iloc[-1][0]
print(type(dat)) # ergibt <class 'str'>

cols = list(df_graf.columns[df_graf.dtypes.eq('object')])
print(cols)
df_graf[cols] = df_graf[cols].apply( pd.to_numeric, errors='coerce' )

dat = df_graf.iloc[-1][0]
print( type( dat ) ) # ergibt <class 'numpy.float64'>

Re: Dataframe letzte Zeile Problem in pandas

Verfasst: Mittwoch 16. Dezember 2020, 21:48
von tmessers
@__blackjack__:
Ich erzeuge den DataFrame mit BeautifulSoup. Deshalb ist der Wert wahrscheinlich ein String.