Estoy trabajando con este Pandas DataFrame en Python.
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 Temp_Rating
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 una selección booleana, puedo seleccionar solo una de estas columnas a la vez. El problema es que si intento unirme a ellos, no puedo hacerlo mientras conservo el orden correcto.
¿Cómo puedo encontrar solo Temp_Rating
filas con NaN
s y reemplazarlas con el valor en la misma fila de la Farheit
columna?
NaN
(ver aquí ) y luego usar este enfoque.df.drop("Farheit", axis=1)
, pero esa es probablemente una preferencia personaldrop
ahora se prefieredel
en Pandas-land. Si usa un Pandas reciente, lo recomendaríadf = df.drop(columns='Farheit')
sobre la numeración de ejes numéricos.Las soluciones mencionadas anteriormente no funcionaron para mí. El método que utilicé fue:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
fuente
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)
devoluciones:
(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)
fuente