Состояние лямбда-функции в пандах не может распознать np.nan - PullRequest
0 голосов
/ 08 декабря 2018

На фрейме данных pandas у меня есть функция, которая заменяет следующую в столбце mileage:

for index,row in carsDF6.iterrows():
    if carsDF6.loc[index,'mileage'] > 600000:
        carsDF6.loc[index,'mileage'] = np.nan
    if carsDF6.loc[index,'mileage'] < 4000:
        carsDF6.loc[index,'mileage'] = np.nan

Работает нормально.После этого я хочу заменить эти np.nan средними значениями из целого столбца mileage, я использую:

carsDF6.mileage= carsDF6.mileage.map(lambda x: carsDF6.mileage.mean() if x == np.nan else x)

Он не выдает никакой ошибки, он просто не делает то, что предполагает, потому чтокогда я проверяю NaN с:

carsDF6.loc[carsDF6.isnull().any(axis=1)]

, он все равно выдает те же 6 записей с NaN.

1 Ответ

0 голосов
/ 08 декабря 2018

Проще всего использовать fillna со средним значением:

carsDF6['mileage'] = carsDF6.mileage.fillna(carsDF6.mileage.mean())

Но если вы хотите исправить свой метод, вы можете проверить равенство с помощью NaN s с помощью np.isnan:

carsDF6['mileage'] = carsDF6.mileage.map(lambda x: carsDF6.mileage.mean() if np.isnan(x)  else x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...