Voglio trovare tutti i valori in un frame di dati Pandas che contengono spazi bianchi (qualsiasi quantità arbitraria) e sostituire quei valori con NaNs.
Qualche idea su come migliorare?
Fondamentalmente voglio girare questo:
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
In questo:
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
Sono riuscito a farlo con il codice qui sotto, ma l'uomo è brutto. Non è Pythonic e sono sicuro che non è nemmeno l'uso più efficiente dei panda. Ciclo attraverso ogni colonna e faccio la sostituzione booleana contro una maschera di colonna generata applicando una funzione che esegue una ricerca regex di ciascun valore, corrispondente su spazi bianchi.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Potrebbe essere ottimizzato un po 'ripetendo solo i campi che potrebbero contenere stringhe vuote:
if df[i].dtype == np.dtype('object')
Ma questo non è molto di un miglioramento
E infine, questo codice imposta le stringhe di destinazione su None, che funziona come le funzioni di Pandas fillna(), ma sarebbe bello per completezza se potessi effettivamente inserire un NaNdirettamente anziché None.
replacecon una regex ... (forse questo dovrebbe essere richiesto come funzionalità).