Ich möchte alle Werte in einem Pandas-Datenrahmen finden, die Leerzeichen (eine beliebige Menge) enthalten, und diese Werte durch NaNs ersetzen.
Irgendwelche Ideen, wie dies verbessert werden kann?
Grundsätzlich möchte ich das umdrehen:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz
2000-01-05 -0.222552 4
2000-01-06 -1.176781 qux
Das mögen:
A B C
2000-01-01 -0.532681 foo 0
2000-01-02 1.490752 bar 1
2000-01-03 -1.387326 foo 2
2000-01-04 0.814772 baz NaN
2000-01-05 -0.222552 NaN 4
2000-01-06 -1.176781 qux NaN
Ich habe es mit dem folgenden Code geschafft, aber Mann, ist es hässlich. Es ist nicht Pythonic und ich bin sicher, es ist auch nicht die effizienteste Verwendung von Pandas. Ich durchlaufe jede Spalte und ersetze sie boolesch gegen eine Spaltenmaske, die durch Anwenden einer Funktion generiert wird, die eine Regex-Suche für jeden Wert durchführt und mit Leerzeichen übereinstimmt.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Es könnte ein wenig optimiert werden, indem nur Felder durchlaufen werden, die leere Zeichenfolgen enthalten könnten:
if df[i].dtype == np.dtype('object')
Aber das ist keine große Verbesserung
Und schließlich setzt dieser Code die Zielzeichenfolgen auf Keine, was mit Pandas 'Funktionen wie funktioniert fillna()
, aber der Vollständigkeit halber wäre es schön, wenn ich tatsächlich eine NaN
direkt anstelle von einfügen könnte None
.
replace
mit einem regulären Ausdruck arbeiten zu können ... (vielleicht sollte dies als Funktion angefordert werden).