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 NaN
diretamente em vez de None
.
replace
com uma regex ... (talvez isso deva ser solicitado como um recurso).