Удаление бесконечных значений из DataFrame в Pandas
Быстрый ответ
Для быстрого удаления бесконечных и отрицательно бесконечных значений из DataFrame используйте следующую команду:
df = df.replace([np.inf, -np.inf], np.nan).dropna()
Здесь метод .replace()
в Pandas заменяет оба типа бесконечностей (np.inf
и -np.inf
) на пропуски NaN
, после чего .dropna()
исключает строки с этими пропусками.
Если в некотором контексте вам требуется временно рассматривать бесконечности как NaN
, используйте следующий код:
with pd.option_context('use_inf_as_na', True):
df = df.dropna()
Для постоянного представления бесконечностей как пропусков можно задать соответствующие параметры Pandas:
pd.set_option('use_inf_as_na', True)
Чтобы оставить в DataFrame только конечные значения, воспользуйтесь следующим кодом:
df = df[np.isfinite(df).all(1)]
Если необходимо обработать бесконечности в определённых колонках, используйте такой код:
df = df.replace({col: {np.inf: np.nan, -np.inf: np.nan} for col in ['col1', 'col2']}).dropna(subset=['col1', 'col2'])
Берегите целостность данных: важно не удалять значимую информацию вместе с нежелательными значениями.
Тишина бесконечностей
Возможно, в вашем DataFrame появляются положительная или отрицательная бесконечности в результате расчётов. Они не представляют угрозы, но могут создавать путаницу при анализе или визуализации данных.
Обращение с бесконечностями как с NaN
Преобразование бесконечностей в NaN
упрощает процесс обработки данных, так как такие значения легко обнаруживаются и исключаются.
Особенности удаления из конкретных колонок
Чтобы удалить бесконечности из определённой колонки, вы можете воспользоваться таким кодом:
df['your_column'] = df['your_column'].replace([np.inf, -np.inf], np.nan)
Если колонка должна содержать только конечные значения:
df = df[df['your_column'].apply(np.isfinite)]
Если нужно заменить бесконечности в нескольких колонках в зависимости от их типа, примените следующую команду:
df = df.apply(lambda x: x.replace([np.inf, -np.inf], np.nan) if x.dtype == 'float64' else x)
Обратите внимание, что в старых версиях библиотеки Pandas вместо use_inf_as_na
использовался use_inf_as_null
. Всегда проверяйте версии библиотек, которыми пользуетесь!
Визуализация
После применения команды df.replace([np.inf, -np.inf], np.nan).dropna()
, бесконечные значения исчезают:
До: [🌾, 🍇, 🍯, 🎈]
После: [🌾, 🍇, 🍯]
DataFrame освобождается от всех бесконечностей!
Управление бесконечными значениями
Учтите, что нечисловые типы данных и скрытые значения могут вызвать путаницу при обработке бесконечностей. Предварительный анализ данных поможет предотвратить возникновение трудностей.
Вы можете также разработать функцию очистки данных, которая будет обрабатывать бесконечности в сочетании с другими этапами обработки данных.
Создание настраиваемой функции для решения специфических проблем с данными позволит вам быстрее находить и устранять непредвиденные искажения. Защитите такую функцию при помощи блока try/except для повышения надёжности.
Полезные материалы
- pandas.DataFrame.drop – документация pandas 2.2.0 – детальное руководство по удалению данных по меткам в pandas.
- Удаление бесконечных значений из DataFrame в pandas – Stack Overflow – проверенный указанной проблемой способ удаления бесконечных значений из DataFrame.
- Работа с отсутствующими данными – документация pandas 2.2.0 – экстенсивное руководство по работе с пропущенными данными в pandas, включая
NaN
иNone
. - numpy.isfinite – Руководство NumPy v1.26 – всё, что вам нужно знать о выявлении скрытых бесконечных значений, таких как
inf
,-inf
иNaN
. - Индексация и выбор данных – документация pandas 2.2.0 – руководство по избирательной индексации в pandas.