pandasОчистка данныхEasyБесплатно~6 мин

to_numeric с errors='coerce' + диагностика

// Условие

Колонка amount_raw пришла из CSV как строка. Часть значений — нормальные числа, часть — мусор: 'N/A', '-', пустые строки, и числа в европейском формате с запятой (например '1234,56').

Что нужно
Приведи amount_raw к числовому типу и посчитай потери. Верни dict (не DataFrame) с ключами:
  • clean_count (int) — сколько строк успешно сконвертировалось;
  • coerced_nan (int) — сколько превратилось в NaN;
  • total_amount (float) — сумма по успешно сконвертированным (округлить до 2 знаков).

// Данные

df: order_id, amount_raw (string — числа + мусор + европейский формат с запятой)
▶ Решить в pandas-тренажёре

// Решение

Подсказка

Сначала почисти формат: df['amount_raw'].str.replace(',', '.', regex=False) — это превратит '1234,56' в '1234.56'.

Потом: pd.to_numeric(..., errors='coerce') — мусор превратится в NaN вместо исключения. astype(float) упадёт на первой плохой строке.

Считай метрики: amount.notna().sum(), amount.isna().sum(), amount.sum(). Верни dict с тремя ключами.

Сначала попробуй сам → Показать решение
df = load_data()

# 1) европейский формат: запятая → точка
amount = df['amount_raw'].str.replace(',', '.', regex=False)
# 2) безопасная конвертация
amount = pd.to_numeric(amount, errors='coerce')

clean_count  = int(amount.notna().sum())
coerced_nan  = int(amount.isna().sum())
total_amount = round(float(amount.sum()), 2)

result = {
    'clean_count':  clean_count,
    'coerced_nan':  coerced_nan,
    'total_amount': total_amount,
}
print(result)
errors='coerce' — безопасный способ привести колонку к числу (вместо astype(float), которая упадёт на первой плохой строке). Всегда диагностируй сколько NaN получилось — если 50% «coerced», что-то не так с данными ИЛИ с подходом. Альтернатива для европейского формата: pd.read_csv(..., decimal=',') уже на этапе чтения.

// Похожие задачи