Substituindo valores em branco (espaço em branco) por NaN em pandas
Eu quero encontrar todos os valores em um dataframe Pandas que contenham espaços em branco (qualquer quantidade arbitrária) e substitua esses valores por NaNs.
Alguma idéia de como isso pode ser melhorado?
Basicamente eu 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
Eu consegui fazer isso com o código abaixo, mas cara é feio. Não é Pythonic e tenho certeza que não é o uso mais eficiente de pandas também. Eu faço loop em cada coluna e faço uma substituição booleana em uma máscara de coluna gerada pela aplicação de uma função que faz uma pesquisa em regex de cada valor, correspondendo ao espaço em branco.
for i in df.columns:
df[i][df[i].apply(lambda i: True if re.search('^\s*Pode ser otimizado um pouco apenas pela iteração de campos que podem conter strings vazias:
if df[i].dtype == np.dtype('object')
Mas isso não é muito de uma melhoria
E, finalmente, esse código define as strings de destino como None, que funciona com funções do Pandas comofillna()
, mas seria bom para completude se eu pudesse inserir umNaN
diretamente em vez deNone
.
, str(i)) else False)]=None
Pode ser otimizado um pouco apenas pela iteração de campos que podem conter strings vazias:
if df[i].dtype == np.dtype('object')
Mas isso não é muito de uma melhoria
E, finalmente, esse código define as strings de destino como None, que funciona com funções do Pandas comofillna()
, mas seria bom para completude se eu pudesse inserir umNaN
diretamente em vez deNone
.