Как применить .fillna () к отфильтрованному фрейму данных? - PullRequest
0 голосов
/ 29 мая 2020

Я изучаю pandas, используя набор данных игроков из женского чемпионата мира.

Я хочу применить .fillna () к результатам следующего фильтра основного фрейма данных:

df[(df["pos"] == "GK") & (df["goals"].isnull())]

Как применить:

fillna(0, inplace=True)

К указанному выше фильтру, в столбце «цели».

Я использовал приведенный ниже код, но когда я его применяю, он запускается, но не работает:

df.loc[df["pos"] == "GK"].loc[df["goals"].isnull()].loc[:,"goals"].fillna(0, inplace=True)

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Первая строка выбирает индекс, и вы знаете столбец, поэтому просто используйте один loc, и все будет хорошо:

df.loc[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals'].fillna(0, inplace=True)

update:

Так что, похоже, pandas возвращает копию, а inplace на самом деле ничего там не делает. Однако вы не хотите назначать его для всего фрейма данных. Поскольку вы уже фильтруете значения nan, более простой способ - просто присвоить значение напрямую. df.loc[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals'] = 0 Это нормально сработало на моем компьютере, надеюсь, это решит вашу проблему.

0 голосов
/ 30 мая 2020

Вы уже замаскировали с помощью логического выбора. Так что просто .fillna(0)

df[(df["pos"] == "GK") & (df["goals"].isnull())].fillna(0)
0 голосов
/ 30 мая 2020
df[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals']=0

Это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...