Python not supported between instances of 'str' and 'int'?
for c in colnames:
Education=Education[Education[c]> 0]
So lautet mein Befehl, in dem ich aus einem Datensatz nur Zahlen anzeigen möchte, die größer sind als 0.
Leider kommt der oben genannte Fehlercode, was kann ich tun?
1 Antwort
Education[c] ist ein String, 0 ist eine Zahl.
Das kann so nicht gehen, du hast wohl den falschen Datentyp in "Edcuation" und was du da für Zeug machst mit dem neuen Wert assignen will ich glaube ich gar nicht wissen.
Bin kein Python pro, aber es gibt filter(), das dürfte der einfachste weg sein Listen so zu filtern wie du scheinbar willst.
numbers = [-1, 0, 1, 2]
numbers_gt_zero = filter(lambda e: e > 0, test)
print(list(numbers_gt_zero))
Lambda ist mehr oder weniger einfach eine Funktion die man filter übergibt, man könnte auch eine normale Funktion nutzen (ist halt umständlicher und länger, aber eventuell einfach zu verstehen)
numbers = [-1, 0, 1, 2]
def test_gt_zero(e):
return e > 0
numbers_gt_zero = filter(test_gt_zero, numbers)
print(list(numbers_gt_zero))
Und wenn du lieber eine normale for loop möchtest (weils vielleicht einfach zu verstehen ist mit deinem Wissen) dann könnte man das so machen.
numbers = [-1, 0, 1, 2]
numbers_gt_zero = []
for e in numbers:
if e > 0: numbers_gt_zero.append(e)
print(numbers_gt_zero)
Es ist in der Regel besser einfach eine neue Liste zu machen weil eine Liste zu mutieren während man über die einzelnen Elemente loopt in der Regel keine gute Idee ist.
Aber dein Grundproblem ist laut der Fehlermeldung die du bekommst, dass du keinen String mit größer als vergleichen kannst, z.B. "1" > 0 geht einfach nicht. Aber wenn du Zahlen in einem String hast kannst du die mit int(variable) zu einem Integer umwandeln, also z.B. int("1") > 0 geht wieder.
Ich würde mal sagen
numbers_gt_zero = [i for i in numbers if i > 0]
wäre der pythonic way.
Yep das stimmt, das Feature hatte ich vergessen.
Hab noch mal etwas doku gelesen und das ist eindeutig der bessere Weg in Python, für filter spricht höchstens das es lesbarer für Leute ist die aus anderen Sprachen kommen (wie mich die Python nur nutzen um Kleinigkeiten zu automatisieren oder so), aber das dürfte nicht relevant sein.
Schneller sind list crompehensions, also dein Weg, scheinbar auch, gut zu wissen.
Wie lautet denn dann der Befehl um nur Zahlen größer 0 anzeigen zu lassen?