Pandas applymap функция удаляет строки, когда применяется слишком много столбцов? - PullRequest
0 голосов
/ 13 декабря 2018

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

df[df.applymap(np.isfinite).all(1)]

Когда я уменьшаю свой фрейм данных до 7 столбцов или меньше, это работает.Однако, когда я пытаюсь запустить это на фрейме данных с большим количеством столбцов, мне возвращается пустой фрейм данных только с заголовками столбцов.

Что здесь происходит?Мой фрейм данных имеет 800 строк.

Ответы [ 2 ]

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

Это точно , что вы должны ожидать при условии all.Рассмотрим этот минимальный пример:

df = pd.DataFrame([[1, 2, np.inf],
                   [4, np.inf, 6]])

res1 = df[df.iloc[:, :2].applymap(np.isfinite).all(1)]  # test first 2 columns only
res2 = df[df.applymap(np.isfinite).all(1)]              # test all columns

print(len(res1.index))  # 1
print(len(res2.index))  # 0

df.iloc[:, :2] фильтры только для первых 2 столбцов и, очевидно, первая строка будет сохранена.В то время как во втором случае обе строки исключаются, поскольку рассматриваются все столбцы.

Кстати, np.isfinite(df).all(1) более идиоматичен в этом случае: вам не нужно применятьоперация для каждого значения индивидуально через applymap.

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

Давайте посмотрим на ваш код здесь.df.applymap (np.isfinite) .all (1) представляет собой серию с тем же индексом, что и исходный фрейм данных, и каждый элемент имеет значение True или False, в зависимости от того, являются ли все столбцы конечными или нет.Вы используете эту серию в качестве маски для фильтрации вашего исходного кадра данных.Если результирующий кадр данных пуст, это означает, что ваша серия полна ложных.Другими словами, каждая строка имеет хотя бы одно значение, которое не является конечным.

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