Decir que tengo una columna en un dataframe que tiene algunos números y algunos no los 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 para np.float, y todo lo demás que no es float convertir a NaN?

Cuando intento:

>> df['foo'].astype(np.float)

o

>> df['foo'].apply(np.float)

Puedo obtener ValueError: could not convert string to float: -

  • Para una explicación más completa de pd.to_numeric junto con sus aplicaciones, por favor, eche un vistazo a esta respuesta.

4 Comentarios

  1. 54

    De pandas 0.17.0 convert_objects plantea una advertencia:

    FutureWarning: convert_objects está en desuso. Utilice el tipo de datos
    convertidores específicos de la enfermedad de parkinson.to_datetime, pd.to_timedelta y la ep.to_numeric.

    Usted podría utilizar pd.to_numeric método y aplicarlo para el dataframe con arg coerce.

    df1 = df.apply(pd.to_numeric, args=('coerce',))

    o tal vez más apropiadamente:

    df1 = df.apply(pd.to_numeric, errors='coerce')

    EDITAR

    El método anterior sólo es válida para los pandas versión >= 0.17.0, de docs ¿qué hay de nuevo en los pandas 0.17.0:

    pd.to_numeric es una nueva función para obligar a las cadenas a números (posiblemente con la coerción) (GH11133)

    • Dedos cruzados para que esto viene de atrás, fue una gran bala de plata.
    • ‘módulo’ el objeto no tiene ningún atributo ‘to_numeric’ ?
    • mostrar versión editada, solo está disponible a partir de 0.17.0 pandas versión
  2. 31

    Utilizar el convert_objects método Series (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 DataFrame método.

    • «Intentar deducir mejor dtype para columnas de objeto» es básicamente una bala mágica… (y lo hace en fechas demasiado.)
    • gracias!!! este método debería ser en todos los pandas tutorial.
    • sorprendentemente baratos no hay una «limpieza» en la sección 10 minutos tutorial. Necesito terminar mi libro 🙂
    • Es depreciado por desgracia :/
  3. 10

    Usted puede simplemente utilizar pd.to_numeric y de error de configuración para coerce sin usar apply

    df['foo'] = pd.to_numeric(df['foo'], errors='coerce')
  4. 8

    Primera reemplazar todos los valores de cadena con None, para marcarlos como de la falta de valores y, a continuación, convertir flotar.

    df['foo'][df['foo'] == '-'] = None
    df['foo'] = df['foo'].astype(float)
    • Gracias! Buena y sencilla.
    • Simple y funciona mucho mejor que el anterior sugerencias.
    • este hecho trabajo para mí…alguna idea?

Dejar respuesta

Please enter your comment!
Please enter your name here