Estou trabalhando com este DataFrame Pandas em 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
Preciso substituir todos os NaNs na Temp_Rating
coluna pelo valor da Farheit
coluna.
Isto é o que eu preciso:
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
Se eu fizer uma seleção booleana, posso escolher apenas uma dessas colunas por vez. O problema é que, se eu tentar me juntar a eles, não poderei fazer isso enquanto preservo a ordem correta.
Como posso encontrar apenas Temp_Rating
linhas com os NaN
e substituí-los pelo valor na mesma linha da Farheit
coluna?
NaN
(veja aqui ) e então usar esta abordagem.df.drop("Farheit", axis=1)
, mas essa é provavelmente a preferência pessoaldrop
agora preferedel
na terra dos Pandas. Se estiver usando um Pandas recente, recomendariadf = df.drop(columns='Farheit')
a numeração do eixo numérico.As soluções mencionadas acima não funcionaram para mim. O método que usei foi:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
fonte
Outra 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)
retorna:
(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)
fonte