type column change astype python pandas

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.