Quero encontrar todos os valores em um quadro de dados do Pandas que contenham espaço em branco (qualquer quantidade arbitrária) e substituir esses valores por NaNs.
Alguma idéia de como isso pode ser melhorado?
Basicamente, quero transformar isso:
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
Nisso:
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
Consegui fazer isso com o código abaixo, mas cara, é feio. Não é Pythonic e tenho certeza que também não é o uso mais eficiente de pandas. Eu percorro cada coluna e faço a substituição booleana de uma máscara de coluna gerada aplicando uma função que faz uma pesquisa regex de cada valor, correspondendo no espaço em branco.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*$', str(i)) else False)]=None
Ele pode ser otimizado um pouco, apenas repetindo os campos que podem conter cadeias vazias:
if df[i].dtype == np.dtype('object')
Mas isso não melhora muito
E, finalmente, esse código define as seqüências de destino como None, que funciona com as funções do Pandas fillna(), mas seria ótimo se eu pudesse inserir um NaNdiretamente em vez de None.
replacecom uma regex ... (talvez isso deva ser solicitado como um recurso).