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.

questionAnswers(10)

yourAnswerToTheQuestion