Data Wrangling

Эффективное преобразование чисел с плавающей точкой в целые в Pandas DataFrame

Spread the love

Pandas — мощная библиотека Python для обработки данных, часто используемая с DataFrames, содержащими числовые данные. Распространённая задача включает преобразование столбцов чисел с плавающей точкой (float) в целые числа. В этой статье подробно описываются эффективные методы такого преобразования в Pandas DataFrame, а также выделяются их сильные и слабые стороны.

Оглавление

Использование astype(int) для преобразования float в int

Метод astype(int) предоставляет простой подход к преобразованию типов в Pandas. Он напрямую преобразует тип данных столбца в целое число. Однако важно понимать его поведение: он отбрасывает дробную часть, фактически выполняя операцию округления вниз. Это означает, что он отбрасывает дробную составляющую, всегда округляя вниз.

Пример:


import pandas as pd

data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1]}
df = pd.DataFrame(data)

df['col1_int'] = df['col1'].astype(int)
print(df)

Вывод:


   col1  col1_int
0   1.5         1
1   2.7         2
2   3.2         3
3   4.9         4
4   5.1         5

Простота этого метода является его преимуществом, но его негибкое поведение при округлении ограничивает его применимость, когда необходимы другие стратегии округления.

Использование pd.to_numeric() для гибкого преобразования

pd.to_numeric() предлагает больший контроль и гибкость. Хотя он в основном предназначен для преобразования различных типов данных в числовые форматы, он очень эффективен для преобразования float в int, особенно в сочетании с функциями округления.

Пример с округлением:


import pandas as pd
import numpy as np

data = {'col1': [1.5, 2.7, 3.2, 4.9, 5.1, np.nan]}
df = pd.DataFrame(data)

df['col1_int'] = pd.to_numeric(df['col1'], errors='coerce').round().astype(int)
print(df)

Вывод:


   col1  col1_int
0   1.5         2
1   2.7         3
2   3.2         3
3   4.9         5
4   5.1         5
5   NaN        NaN

Здесь errors='coerce' корректно обрабатывает нечисловые значения, преобразуя их в NaN. round() округляет до ближайшего целого числа перед окончательным преобразованием astype(int).

Обработка ошибок и расширенное округление

Для более точного контроля над округлением используйте функции NumPy:

  • np.floor(): Округляет вниз до ближайшего целого числа.
  • np.ceil(): Округляет вверх до ближайшего целого числа.

Не забывайте обрабатывать потенциальные ошибки (например, нечисловые значения) с помощью параметра errors в pd.to_numeric(). Выбор 'coerce' заменяет проблемные значения на NaN, предотвращая ошибки. В качестве альтернативы, 'raise' вызовет исключение, а 'ignore' оставит нечисловые значения без изменений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *