Я работаю с этим фреймом данных Pandas на 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
Мне нужно заменить все NaN в Temp_Rating
столбце значением из Farheit
столбца.
Вот что мне нужно:
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
Если я сделаю логический выбор, я могу выбрать только один из этих столбцов за раз. Проблема в том, что если я затем попытаюсь присоединиться к ним, я не смогу сделать это, сохранив правильный порядок.
Как я могу найти только Temp_Rating
строки с NaN
s и заменить их значением в той же строке Farheit
столбца?
NaN
(см. Здесь ), а затем использовать этот подход.df.drop("Farheit", axis=1)
, но это, вероятно, личное предпочтениеdrop
теперь предпочитаютdel
в Pandas- Land . Если вы используете последние Pandas, рекомендуюdf = df.drop(columns='Farheit')
нумерацию числовых осей.Вышеупомянутые решения не помогли мне. Я использовал следующий метод:
df.loc[df['foo'].isnull(),'foo'] = df['bar']
источник
Другой способ решить эту проблему,
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)
возвращает:
(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)
источник