start_stop = []
for string in s28["SAMPLE_MESSAGE"]:
if 'DISPLAY_FACE_CUE' in string:
start_stop(value).append("start_face")
elif 'DISPLAY_NBACK' in string:
start_stop(value).append("start_nback")
elif 'DISPLAY_FACE_CUE' in string:
start_stop(value+1000).append("stop_face")
elif 'DISPLAY_NBACK' in string:
start_stop(value+2000).append("stop_nback")
s28["start_stop"] = start_stop
print(s28)
TypeError: argument of type 'float' is not iterable
Dabei Habe ich zuvor die NaN's in der Spalte mit leeren Strings ersetzt.
s28.SAMPLE_MESSAGE.fillna(str(""))
Wenn ich versuche, den column type zu String zu wandeln:
s28['SAMPLE_MESSAGE'] = str(s28['SAMPLE_MESSAGE'])
wird mir über
s28.dtypes
weiterhin object für SAMPLE_MESSAGES gegeben.
Ist das überhaupt der richtige Weg, um eine neue Spalte zu erstellen, die sich an Strings in einer anderen Spalte orientieren? Die jeweilige Zelle kann auch mehr als den angegebenen String enthalten, daher hab ich die if... in... Formulierung gewählt.
Vielen Dank im Voraus,
monkiiiii
TypeError: argument of type 'float' is not iterable
Das ist alles kein Python und erst recht kein idiomatisches Pandas.
Fange am besten mit einem Grundlagentutorial in Python an, arbeite das gründlich durch und setzte Dich dann an das Tutorial zu Pandas.
Wenn dann noch Fragen offen sind, kannst Du sie hier gerne stellen, aber hier im Forum Stück für Stück Code erfragen bringt Dich nicht weiter, weil Du mit den Antworten noch gar nicht anfangen kannst.
Und ja, es ist falsch, wenn man bei Pandas-Dataframes anfängt in for-Schleifen irgendwelche Werte zu verarbeiten.
Und zum Fehler: nur weil man etwas `string` nennt, ist das noch lange kein String.
Fange am besten mit einem Grundlagentutorial in Python an, arbeite das gründlich durch und setzte Dich dann an das Tutorial zu Pandas.
Wenn dann noch Fragen offen sind, kannst Du sie hier gerne stellen, aber hier im Forum Stück für Stück Code erfragen bringt Dich nicht weiter, weil Du mit den Antworten noch gar nicht anfangen kannst.
Und ja, es ist falsch, wenn man bei Pandas-Dataframes anfängt in for-Schleifen irgendwelche Werte zu verarbeiten.
Und zum Fehler: nur weil man etwas `string` nennt, ist das noch lange kein String.
- __blackjack__
- User
- Beiträge: 13929
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@monkiiiii: Das ist alles ein bisschen undurchsichtig und vor allem kann das so nicht sein. Am Anfang bindest Du `start_stop` an eine leere Liste und ein paar Zeilen weiter versuchst Du dann diese Liste wie eine Funktion aufzurufen. Eine Pandas-Spalte in ihre Zeichenkettendarstellung zu wandeln und dann wieder einer Spalte zuordnen zu wollen ist auch komisch bis — das geht eigentlich gar nicht würde ich sagen, oder zumindest nur in sehr exotischen Ausnahmefällen. Oder Pandas sieht eine Zeichenkette als Skalar. Dann bekommt jede Zelle in der ganzen Spalte die gleiche Zeichenkette zugewiesen.
Bei Fehlermeldungen bitte immer den kompletten Traceback zeigen, dann muss man nicht raten *wo* der Fehler auftritt.
Bei Fehlermeldungen bitte immer den kompletten Traceback zeigen, dann muss man nicht raten *wo* der Fehler auftritt.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- pillmuncher
- User
- Beiträge: 1527
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@monkiiiii:
Was ist denn s28? Wie unterscheidet es sich von s27 und s29? Und warum glaubst du, dass dir irgendjemand hier helfen kann, wenn du nur derart unvollständige Angaben zu deinem Problem machst? Das wurde dir auch schon von __deets__ in einem anderen Thread gesagt.
Da bleibt einem nur zu sagen: s28["SAMPLE_MESSAGE"] wird halt ein float sein und kein String. Was erwartest du denn, was passieren soll, wenn man zB. über π oder √2 iteriert? Und selbst, wenn das ein String wäre - wenn man über einen String iteriert, sind die Elemente einzelne Buchstaben. Wie kann denn zB. 'DISPLAY_FACE_CUE' in einem einzigen Buchstaben enthalten sein?
Sobald du das gelöst hast, wirst du einen TypeError: 'list' object is not callable bekommen, weil du versuchst, die Liste start_stop mit dem Argument value aufzurufen. Listen kann man nicht aufrufen.
Was ist denn s28? Wie unterscheidet es sich von s27 und s29? Und warum glaubst du, dass dir irgendjemand hier helfen kann, wenn du nur derart unvollständige Angaben zu deinem Problem machst? Das wurde dir auch schon von __deets__ in einem anderen Thread gesagt.
Da bleibt einem nur zu sagen: s28["SAMPLE_MESSAGE"] wird halt ein float sein und kein String. Was erwartest du denn, was passieren soll, wenn man zB. über π oder √2 iteriert? Und selbst, wenn das ein String wäre - wenn man über einen String iteriert, sind die Elemente einzelne Buchstaben. Wie kann denn zB. 'DISPLAY_FACE_CUE' in einem einzigen Buchstaben enthalten sein?
Sobald du das gelöst hast, wirst du einen TypeError: 'list' object is not callable bekommen, weil du versuchst, die Liste start_stop mit dem Argument value aufzurufen. Listen kann man nicht aufrufen.
In specifications, Murphy's Law supersedes Ohm's.
- __blackjack__
- User
- Beiträge: 13929
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Falls `s28` ein DataFrame ist, dann bewirkt die Zuweisung einer Zeichenkette an eine ”Spalte”, dass da in jeder Zeile in dieser Spalte der gleiche Wert steht:
Und wenn man die alte Spalte nimmt, das `Series`-Objekt in eine Zeichenkette umwandelt, und dann wieder der Spalte zuordnet, dann hat man die selbe Zeichenkettenrepräsentation auch wieder in jeder Zeile als Zellenwert. Also dieses ``s28['SAMPLE_MESSAGE'] = str(s28['SAMPLE_MESSAGE'])`` ist maximal unsinnig:
Die gesuchten Teilzeichenketten sind dann entweder in *jeder* Zeiler, oder in *keiner* Zeile in dieser Spalte enthalten. Damit macht ein iterieren über die Werte keinen Sinn.
Hier sieht man aber auch, dass *die* Stelle gar nicht dafür verantwortlich sein, kann, denn `string` kommt aus einem `Series`-Objekt in dem Zeichenketten stecken sollten — sofern da tatsächlich das gemacht wird, was behauptet wurde.
Code: Alles auswählen
In [6]: df["neu"] = "foobar"
In [7]: df
Out[7]:
test neu
0 42 foobar
1 23 foobar
2 4711 foobar
Code: Alles auswählen
In [8]: df["test"] = str(df["test"])
In [9]: df
Out[9]:
test neu
0 0 42\n1 23\n2 4711\nName: test, d... foobar
1 0 42\n1 23\n2 4711\nName: test, d... foobar
2 0 42\n1 23\n2 4711\nName: test, d... foobar
In [10]: df["test"][0]
Out[10]: '0 42\n1 23\n2 4711\nName: test, dtype: int64'
Hier sieht man aber auch, dass *die* Stelle gar nicht dafür verantwortlich sein, kann, denn `string` kommt aus einem `Series`-Objekt in dem Zeichenketten stecken sollten — sofern da tatsächlich das gemacht wird, was behauptet wurde.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware