python - column - pandas astype
Pandas: Convertir a numérico, crear NaNs cuando sea necesario (4)
En pandas 0.17.0
convert_objects
una advertencia:
FutureWarning: convert_objects está en desuso. Utilice los convertidores específicos de tipo de datos pd.to_datetime, pd.to_timedelta y pd.to_numeric.
Puede usar el método pd.to_numeric
y aplicarlo para el marco de datos con arg coerce
.
df1 = df.apply(pd.to_numeric, args=(''coerce'',))
o puede ser de una manera más apropiada:
df1 = df.apply(pd.to_numeric, errors=''coerce'')
EDITAR
Ese método solo es válido para pandas versión> = 0.17.0
, de los documentos de novedades de pandas 0.17.0 :
pd.to_numeric es una nueva función para forzar cadenas a números (posiblemente con coerción) (GH11133)
Digamos que tengo una columna en un marco de datos que tiene algunos números y algunos que no son números
>> df[''foo'']
0 0.0
1 103.8
2 751.1
3 0.0
4 0.0
5 -
6 -
7 0.0
8 -
9 0.0
Name: foo, Length: 9, dtype: object
¿Cómo puedo convertir esta columna en np.float
y tener todo lo demás que no sea flotante convertirlo a NaN
?
Cuando intento:
>> df[''foo''].astype(np.float)
o
>> df[''foo''].apply(np.float)
Obtengo ValueError: could not convert string to float: -
Primero reemplace todos los valores de cadena con None
, para marcarlos como valores faltantes y luego conviértalo en flotante.
df[''foo''][df[''foo''] == ''-''] = None
df[''foo''] = df[''foo''].astype(float)
Simplemente puede usar pd.to_numeric
y configurar el error para coerce
sin usar apply
df[''foo''] = pd.to_numeric(df[''foo''], errors=''coerce'')
Utilice el método de la serie convert_objects
(y convert_numeric
):
In [11]: s
Out[11]:
0 103.8
1 751.1
2 0.0
3 0.0
4 -
5 -
6 0.0
7 -
8 0.0
dtype: object
In [12]: s.convert_objects(convert_numeric=True)
Out[12]:
0 103.8
1 751.1
2 0.0
3 0.0
4 NaN
5 NaN
6 0.0
7 NaN
8 0.0
dtype: float64
Nota: esto también está disponible como un método de DataFrame.