As atribuições de novas colunas com o método assign
do código abaixo retorna alguns valores NaN
:
populacao_estados = populacao_estados.assign(
populacao_sem_parenteses = populacao_estados['POPULAÇÃO'].str.replace(
'\(\d{1,2}\)', # Valor procurado
'', # Valor da substituição
regex=True # Força a busca via RegEx.
),
populacao = lambda x: x.loc[:, 'populacao_sem_parenteses'].replace(
'\.',
'',
regex=True
)
)
Daí quando executo o código abaixo para fazer a conversão, ela não funciona:
populacao_estados = populacao_estados.astype({'populacao': 'int64'})
populacao_estados
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-206-947896d39e97> in <cell line: 0>()
----> 1 populacao_estados = populacao_estados.astype({'populacao': 'int64'})
2 populacao_estados
7 frames
/usr/local/lib/python3.11/dist-packages/pandas/core/dtypes/astype.py in _astype_nansafe(arr, dtype, copy, skipna)
131 if copy or arr.dtype == object or dtype == object:
132 # Explicit copy, or required since NumPy can't view from / to object.
--> 133 return arr.astype(dtype, copy=True)
134
135 return arr.astype(dtype, copy=copy)
ValueError: cannot convert float NaN to integer: Error while type casting for column 'populacao'
Resolvi o problema acrescentando o método fillna
, logo depois do método replace
, na atribuição da nova coluna populacao_sem_parenteses
:
populacao_estados = populacao_estados.assign(
populacao_sem_parenteses = populacao_estados['POPULAÇÃO'].str.replace(
'\(\d{1,2}\)', # Valor procurado
'', # Valor da substituição
regex=True # Força a busca via RegEx.
).fillna(populacao_estados['POPULAÇÃO']), # Aqui está a diferença do primeiro código.
populacao = lambda x: x.loc[:, 'populacao_sem_parenteses'].replace(
'\.',
'',
regex=True
)
)