В кадре данных, который я использую, есть столбец для возрастов, называемый возрастом. В столбце возраста есть записи, которые бессмысленны, так как в нем есть значения больше 101 и меньше 1. Столбец возраста также имеет нулевые записи.
Я хочу удалить строки для недопустимых возрастов. Затем я хочу заполнить нулевые записи средним возрастом того, что осталось.
df = df[(df.age <102) & (df.age > 0)]
Когда я это делаю, он удаляет не только бессмысленные возрасты, но и нулевые записи. Я думал о том, чтобы сначала заполнить среднее значение, но я не хочу, чтобы бессмысленные возрасты были включены и искажали среднее значение.
Это можно сделать, по крайней мере, двумя способами:
Способ первый:
оставьте также значения nan
в маске:
df = df[((df.age <102) & (df.age > 0))|(df.age.isnull())]
а затем заполните значения nan
:
df = df.fillna(df.age.mean())
Способ второй:
заполните значения nan
, применив mean
только к замаскированному фрейму данных:
df = df.fillna(df[((df.age <102) & (df.age > 0))]["age"].mean())
а затем нанесите маску:
df = df[((df.age <102) & (df.age > 0))]
Ммм... делает...
df[df.age.isna() | df.age.between(0, 102)]
то, что тебе нужно?