Dies sollte ein wirklich einfaches sein, aber ich bin kurz davor, meinen Kopf gegen die Wand zu schlagen, weil ich herausfinden kann, wie das geht. Jede Hilfe würde sehr geschätzt werden.Einstellwerte basierend auf Zahlenvergleich mit gemischten Spalten - Pandas
Ich habe eine Pandas DataFrame mit einer gemischten Typ-Spalte (es ist eigentlich Dezimal, Float und String, aber nehmen wir einfach an, es ist Float und String). Ich versuche, den Wert aller Schwimmer zu setzen, die kleiner als Null auf 0. Was ich versucht habe, so weit:
In [1]: import pandas as pd
In [2]: ex = [-1, 0, 'rabbit', 'carrots', 10, 24, 'dogs']
In [3]: df = pd.DataFrame(data = ex, columns=['Test'], index = range(len(ex)))
In [4]: Mask = df.loc[:,'Test'].apply(type) != str
In [5]: df.loc[Mask,:] < 0
Out[5]: Test
0 True
1 False
4 False
5 False
Ok groß, so das funktioniert, aber jetzt brauche ich dies passieren in eine .ix
zu tatsächlich setzen Sie den Wert -1, auf Null, und hier ist, wo es schwierig wird (was auch völlig verständlich ist, da der Index nicht von der gleichen Größe wie der ursprüngliche Index ist)
In [6]: df.ix[df.loc[Mask,'Test'] < 0,'Test'] = 0
Out[6]: [...] IndexingError: Unalignable boolean Series key provided
Dies ist vom Kurs abgekommen vollständig verständlich, aber ich weiß nicht, wie ich das beheben kann.
Ich versuchte .index.tolist()
eine zweite Maske zu erzeugen, mir die Indexwerte zu erhalten, auf dem ich handeln sollte, aber dies gibt nur alle Indizes des df.loc[Mask,'Test'] < 0
Vergleich, und zwar unabhängig davon, ob sie wahr oder falsch.
Jede Hilfe würde sehr geschätzt werden.
Grüße,
Tim
Dank! Das funktioniert, hat mir sehr geholfen! –
@ Tim.Lucas Froh, es hilft! –