Estoy trabajando con este Pandas DataFrame en Python 2.7.

File    heat    Farheit Temp_Rating
   1    YesQ    75      N/A
   1    NoR     115     N/A
   1    YesA    63      N/A
   1    NoT     83      41
   1    NoY     100     80
   1    YesZ    56      12
   2    YesQ    111     N/A
   2    NoR     60      N/A
   2    YesA    19      N/A
   2    NoT     106     77
   2    NoY     45      21
   2    YesZ    40      54
   3    YesQ    84      N/A
   3    NoR     67      N/A
   3    YesA    94      N/A
   3    NoT     68      39
   3    NoY     63      46
   3    YesZ    34      81

Necesito reemplazar todos los Nan en la Temp_Rating columna con el valor de la Farheit columna.

Esto es lo que necesito:

File        heat    Observation
   1        YesQ    75
   1        NoR     115
   1        YesA    63
   1        YesQ    41
   1        NoR     80
   1        YesA    12
   2        YesQ    111
   2        NoR     60
   2        YesA    19
   2        NoT     77
   2        NoY     21
   2        YesZ    54
   3        YesQ    84
   3        NoR     67
   3        YesA    94
   3        NoT     39
   3        NoY     46
   3        YesZ    81

Si hago un Booleano selección, puedo elegir sólo una de estas columnas a la vez. El problema es que si yo, a continuación, intente unirse a ellos, yo no soy capaz de hacer esto, preservando el orden correcto.

Cómo puedo encontrar exclusivamente Temp_Rating filas con el NaNs y reemplazarlos con el valor en la misma fila de la Farheit columna?

InformationsquelleAutor edesz | 2015-03-20

3 Comentarios

  1. 99

    Suponiendo que el DataFrame es en df:

    df.Temp_Rating.fillna(df.Farheit, inplace=True)
    del df['Farheit']
    df.columns = 'File heat Observations'.split()

    Primera reemplazar cualquier NaN valores con el valor correspondiente de df.Farheit. Borrar el 'Farheit' columna. A continuación, cambie el nombre de las columnas. Aquí está el resultado DataFrame:

    Python Pandas reemplazar NaN en una columna con el valor de la fila correspondiente de la segunda columna

  2. 16

    Las mencionadas soluciones no funciona para mí. El método que he utilizado fue:

    df.loc[df['foo'].isnull(),'foo'] = df['bar']
    • Esto funcionó para mí en 0.20 pero no en el de 0,22….alguien tiene idea por qué?
    • Hizo elevar una excepción o simplemente no funcionan? Pruebe el isna() en lugar de isnull().
  3. 1

    Otra forma de resolver este problema,

    import pandas as pd
    import numpy as np
    
    ts_df = pd.DataFrame([[1,"YesQ",75,],[1,"NoR",115,],[1,"NoT",63,13],[2,"YesT",43,71]],columns=['File','heat','Farheit','Temp'])
    
    
    def fx(x):
        if np.isnan(x['Temp']):
            return x['Farheit']
        else:
            return x['Temp']
    print(1,ts_df)
    ts_df['Temp']=ts_df.apply(lambda x : fx(x),axis=1)
    
    print(2,ts_df)

    devuelve:

    (1,    File  heat  Farheit  Temp                                                                                    
    0     1  YesQ       75   NaN                                                                                        
    1     1   NoR      115   NaN                                                                                        
    2     1   NoT       63  13.0                                                                                        
    3     2  YesT       43  71.0)                                                                                       
    (2,    File  heat  Farheit   Temp                                                                                   
    0     1  YesQ       75   75.0                                                                                       
    1     1   NoR      115  115.0
    2     1   NoT       63   13.0
    3     2  YesT       43   71.0)

Dejar respuesta

Please enter your comment!
Please enter your name here