Короткий ответ
Столбец приводят через pd.to_numeric(df['col'], errors='coerce') или df['col'].astype(float), предварительно убедившись, что в данных нет нечисловых артефактов вроде пробелов или нестандартных разделителей.
Как это работает подробнее
astype(float) напрямую пытается преобразовать все значения и выбрасывает ошибку, если хотя бы одно значение не парсится как число; pd.to_numeric с errors='coerce' вместо ошибки подставляет NaN для непарсящихся значений, позволяя продолжить анализ и отдельно посчитать, сколько строк не удалось преобразовать.
Пример кода
Пример Python
import pandas as pd
df = pd.DataFrame({'amount': ['100', '200', '1,500', 'n/a']})
df['amount_clean'] = pd.to_numeric(df['amount'].str.replace(',', ''), errors='coerce')
print(df)
print(df['amount_clean'].isna().sum()) # 1Что использовать на практике
- На практике: перед преобразованием стоит проверить уникальные "странные" значения в столбце (df['col'].unique()), чтобы понять источник проблемы — например, разделитель тысяч, запятая вместо точки или текстовые пометки типа "n/a"; после coerce обязательно считают df['col'].isna().sum(), чтобы не потерять данные незаметно.
- Проверка: после очистки от запятых успешно преобразуются 3 значения, а 'n/a' превращается в NaN, что подтверждается isna().sum() равным 1.
Подводные камни
- Частые ошибки: сразу применяют astype(float) без coerce и получают необработанное исключение на первой проблемной строке, даже не узнав, сколько их всего; применяют coerce и забывают проверить количество получившихся NaN, тихо теряя часть данных в последующих агрегатах.