Pracuję z tym DataFrame Pandas w Pythonie.
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
Muszę zamienić wszystkie NaN w Temp_Rating
kolumnie wartością z Farheit
kolumny.
To jest to, czego potrzebuję:
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
Jeśli dokonam wyboru typu Boolean, mogę wybrać tylko jedną z tych kolumn naraz. Problem w tym, że jeśli następnie spróbuję do nich dołączyć, nie jestem w stanie tego zrobić zachowując prawidłową kolejność.
Jak mogę znaleźć tylko Temp_Rating
wiersze z literami NaN
s i zastąpić je wartością z tego samego wiersza Farheit
kolumny?
NaN
(patrz tutaj ), a następnie zastosować to podejście.df.drop("Farheit", axis=1)
, ale to prawdopodobnie osobiste preferencjedrop
teraz wolędel
w Pandas-land. Jeśli używasz niedawnych Pand, zalecałbym zamiastdf = df.drop(columns='Farheit')
numerycznej numeracji osi.Powyższe rozwiązania u mnie nie działają. Metoda, której użyłem, to:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
źródło
Inny sposób rozwiązania tego problemu,
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)
zwroty:
(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)
źródło