guide - pandas python tutorial
error al usar astype cuando NaN existe en un marco de datos (1)
Si faltan algunos valores en la columna ( NaN
) y luego se convierten en numéricos, siempre dtype
es float
. No puede convertir valores a int
. Sólo para float
, porque el type
de NaN
es float
.
print (type(np.nan))
<class ''float''>
Consulte la docs cómo convertir valores si al menos un NaN
:
entero> cast to float64
Si necesita valores int, necesita reemplazar NaN
por algún int
, por ejemplo, 0
por fillna
y luego funciona perfectamente:
df[''A''] = df[''A''].str.extract(''(/d+)'', expand=False)
df[''B''] = df[''B''].str.extract(''(/d+)'', expand=False)
print (df)
A B
0 10 20
1 20 NaN
2 NaN 30
3 40 40
df1 = df.fillna(0).astype(int)
print (df1)
A B
0 10 20
1 20 0
2 0 30
3 40 40
print (df1.dtypes)
A int32
B int32
dtype: object
df
A B
0 a=10 b=20.10
1 a=20 NaN
2 NaN b=30.10
3 a=40 b=40.10
Lo intenté :
df[''A''] = df[''A''].str.extract(''(/d+)'').astype(int)
df[''B''] = df[''B''].str.extract(''(/d+)'').astype(float)
Pero me sale el siguiente error:
ValueError: no se puede convertir NaN flotante en entero
Y:
AttributeError: solo puede usar el descriptor de acceso .str con valores de cadena, que usan np.object_ dtype en pandas
Cómo puedo solucionar esto ?