Работа с пропущенными значениями и преобразование типов данных

Работа с пропущенными значениями и преобразование типов данных — это важные этапы при обработке данных в pandas. Вот несколько способов для выполнения этих задач:

Работа с пропущенными значениями

Поиск пропущенных значений:

  • df.isna() или df.isnull() — возвращает DataFrame с булевыми значениями, где True указывает на пропущенные значения.

  • df.isna().sum() — возвращает количество пропущенных значений по каждому столбцу.

Пример:

import pandas as pd
import numpy as np

# Создание DataFrame с пропущенными значениями
data = {'A': [1, 2, np.nan, 4],
        'B': [np.nan, 'b', 'c', 'd']}
df = pd.DataFrame(data)

# Поиск пропущенных значений
print(df.isna())
print(df.isna().sum())

Результат:

       A      B
0  False   True
1  False  False
2   True  False
3  False  False

A    1
B    1
dtype: int64

Заполнение пропущенных значений:

  • df.fillna(value) — заполняет пропущенные значения указанным значением.

  • df.fillna(method='ffill') — заполняет пропущенные значения значением предыдущей строки (вперёд).

  • df.fillna(method='bfill') — заполняет пропущенные значения значением следующей строки (назад).

Пример:

# Заполнение пропущенных значений конкретным значением
df_filled = df.fillna({'A': 0, 'B': 'unknown'})
print(df_filled)

# Заполнение пропущенных значений методом 'forward fill'
df_ffill = df.fillna(method='ffill')
print(df_ffill)

# Заполнение пропущенных значений методом 'backward fill'
df_bfill = df.fillna(method='bfill')
print(df_bfill)

Результат:

     A      B
0  1.0  unknown
1  2.0        b
2  0.0        c
3  4.0        d

     A  B
0  1.0  b
1  2.0  b
2  2.0  c
3  4.0  d

     A  B
0  1.0  b
1  2.0  c
2  4.0  c
3  4.0  d

Удаление строк или столбцов с пропущенными значениями:

  • df.dropna() — удаляет строки с пропущенными значениями.

  • df.dropna(axis=1) — удаляет столбцы с пропущенными значениями.

Пример:

# Удаление строк с пропущенными значениями
df_dropped_rows = df.dropna()
print(df_dropped_rows)

# Удаление столбцов с пропущенными значениями
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)

Результат:

     A  B
1  2.0  b
3  4.0  d

     A
0  1.0
1  2.0
3  4.0

Замена пропущенных значений статистическими значениями:

  • df.fillna(df.mean()) — заменяет пропущенные значения средним значением столбца.

  • df.fillna(df.median()) — заменяет пропущенные значения медианой столбца.

Пример:

# Замена пропущенных значений средним значением
df['A'] = df['A'].fillna(df['A'].mean())
print(df)

# Замена пропущенных значений медианой
df['B'] = df['B'].fillna(df['B'].mode()[0])
print(df)

Результат:

     A      B
0  1.0  unknown
1  2.0        b
2  2.0        b
3  4.0        d

Преобразование типов данных

Преобразование типов данных:

  • df.astype(dtype) — изменяет тип данных столбца на указанный тип. Например, df['column'] = df['column'].astype(int).

Пример:

# Преобразование типа данных столбца
df['A'] = df['A'].astype(int)
print(df.dtypes)

Результат:

A     int64
B    object
dtype: object

Преобразование типов данных с помощью pd.to_datetime():

  • df['date_column'] = pd.to_datetime(df['date_column']) — преобразует столбец в формат даты и времени.

Пример:

# Создание DataFrame с строками, представляющими даты
data_dates = {'date': ['2024-01-01', '2024-02-01', '2024-03-01']}
df_dates = pd.DataFrame(data_dates)

# Преобразование столбца в формат даты
df_dates['date'] = pd.to_datetime(df_dates['date'])
print(df_dates)
print(df_dates.dtypes)

Результат:

        date
0 2024-01-01
1 2024-02-01
2 2024-03-01

date    datetime64[ns]
dtype: object

Преобразование категориальных данных:

  • df['category_column'] = df['category_column'].astype('category') — преобразует столбец в категориальный тип.

  • df['category_column'].cat.codes — преобразует категориальные данные в числовые коды.

Пример:

# Создание DataFrame с категориальными данными
df_cat = pd.DataFrame({'category': ['low', 'medium', 'high', 'medium', 'low']})

# Преобразование столбца в категориальный тип
df_cat['category'] = df_cat['category'].astype('category')
print(df_cat)
print(df_cat.dtypes)

# Преобразование категориальных данных в числовые коды
df_cat['category_codes'] = df_cat['category'].cat.codes
print(df_cat)

Результат:

  category
0      low
1   medium
2     high
3   medium
4      low

category    category
dtype: object

  category  category_codes
0      low               1
1   medium               2
2     high               0
3   medium               2
4      low               1

Изменение формата чисел:

  • df['float_column'] = df['float_column'].round(2) — округляет числа до 2 знаков после запятой.

Пример:

# Создание DataFrame с плавающими точками
df_float = pd.DataFrame({'values': [1.23456, 2.34567, 3.45678]})

# Округление чисел до 2 знаков после запятой
df_float['values'] = df_float['values'].round(2)
print(df_float)

Результат:

   values
0    1.23
1    2.35
2    3.46

Last updated