Метод Pandas fillna не работает на месте

У меня есть dataframe Problem_data, который имеет значения NaN в некоторых ячейках. Я запустил следующий код.

problem_data[problem_data['level_type'] == 5.0]

Это привело к этому:

      problem_id    level_type  points  tags 
5    prob_1479    5.0        NaN    NaN 
31   prob_2092    5.0        NaN    NaN 
38   prob_4395    5.0        NaN    combinatorics,constructive algorithms,dfs 
43   prob_5653    5.0        NaN    NaN 
48   prob_2735    5.0       2750.0  NaN 
52   prob_1054    5.0       2000.0  combinatorics,dp
64   prob_2610    5.0        NaN    NaN
65   prob_1649    5.0        NaN    NaN
70   prob_4675    5.0        NaN    dp,games
74   prob_445     5.0        NaN    NaN
81   prob_6481    5.0       2500.0  combinatorics,dp,implementation,number theory
134  prob_2964    5.0       2500.0  games
161  prob_948     5.0       2000.0  dp,games
182  prob_642     5.0        NaN    NaN 

Затем я выполнил следующую команду, чтобы заполнить столбец NaN of 'points'.

problem_data.loc[problem_data['level_type'] == 5.0 , 'points'].fillna(value=2500, inplace=True)

Когда я снова запустил problem_data[problem_data['level_type'] == 5.0], вывод был таким же, как и раньше.

Можете ли вы сказать, почему fillna() здесь не сработало? Что я могу сделать, чтобы исправить это?


person Suyash    schedule 23.09.2017    source источник


Ответы (1)


fillna не работает на подфрагментах фрейма данных. Вам понадобится:

mask = problem_data['level_type'] == 5.0
problem_data.loc[mask, 'points'] = problem_data.loc[mask, 'points'].fillna(value=2500)

problem_data.loc[mask, 'points'] 
5      2500.0
31     2500.0
38     2500.0
43     2500.0
48     2750.0
52     2000.0
64     2500.0
65     2500.0
70     2500.0
74     2500.0
81     2500.0
134    2500.0
161    2000.0
182    2500.0
Name: points, dtype: float64
person cs95    schedule 23.09.2017
comment
это определенно сработало и именно то, что я хотел. Отличная работа! - person Erol Erdogan; 16.08.2020