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 NaN
direttamente anziché None
.
replace
con una regex ... (forse questo dovrebbe essere richiesto come funzionalità).