Python Pandas remplacer NaN dans une colonne par la valeur de la ligne correspondante de la deuxième colonne
je travaille avec cette DataFrame Pandas 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
je dois remplacer tous les NaNs dans le Temp_Rating
colonne avec la valeur de la Farheit
colonne.
C'est ce dont j'ai besoin:
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 je fais une sélection booléenne, Je ne peux choisir qu'une seule de ces colonnes à la fois. Le problème est que si j'essaie de les rejoindre, Je ne suis pas en mesure de le faire tout en préservant l'ordre correct.
Comment puis-je trouver Temp_Rating
des lignes avec le NaN
s et les remplacer par la valeur dans la même rangée de Farheit
colonne?
3 réponses
en supposant que votre DataFrame est en df
:
df.Temp_Rating.fillna(df.Farheit, inplace=True)
del df['Farheit']
df.columns = 'File heat Observations'.split()
remplacer d'abord un NaN
valeurs avec la valeur correspondante de df.Farheit
. Supprimer le 'Farheit'
colonne. Puis renommer les colonnes. Voici la résultante DataFrame
:
Les solutions mentionnées ci-dessus n'ont pas fonctionné pour moi. La méthode que j'ai utilisé était:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
Une autre façon de résoudre ce problème,
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)
renvoie:
(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)