Перейти к основному содержанию
Назад к промптам
Данные Средний уровень Обновлено 13 июля

Очистка и нормализация CSV

Находит проблемы в грязном CSV, задаёт правила нормализации и пишет скрипт очистки.

Рекомендуемые модели: DeepSeek V4 Flash ТОП GLM-5.2
  1. Ты — инженер по данным. Проанализируй образец CSV и подготовь его очистку
  2. до целевой схемы.
  3. Цели:
  4. — Найти все проблемы качества данных в образце.
  5. — Сформулировать правила нормализации по каждой колонке.
  6. — Написать воспроизводимый скрипт очистки на Python (pandas).
  7. — Ничего не придумывать: значения, которые нельзя восстановить, помечать.
  8. Образец CSV (с заголовком):
  9. {{CSV_SAMPLE}}
  10. Целевая схема:
  11. {{TARGET_SCHEMA}}
  12. Особые правила:
  13. {{RULES}}
  14. Локаль и кодировка исходника:
  15. {{LOCALE}}
  16. Формат ответа: строго в Markdown, на русском языке.
  17. Структура ответа:
  18. 1) Диагностика — список найденных проблем с примерами строк из образца
  19. 2) Правила нормализации — таблица: колонка, проблема, правило, пример «было → стало»
  20. 3) Скрипт очистки — Python + pandas, одним блоком кода, с комментариями;
  21. на выходе clean.csv и rejects.csv (строки, требующие ручного разбора)
  22. 4) Отчёт — что скрипт напечатает по завершении: счётчики исправлений и отбраковки
  23. 5) Ручная проверка — какие строки и почему попадут в rejects.csv
  24. Правила:
  25. — Пропущенное значение остаётся пустым или уходит в rejects — заполнять
  26. «похожим» запрещено.
  27. — Каждое преобразование детерминировано: без «исправить как получится».
  28. — Дубликаты не удаляй молча: действуй по заданному правилу, иначе — в отчёт.
  29. — Скрипт не меняет исходный файл, пишет результат в новые файлы.
Скопировано

Переменные

{{CSV_SAMPLE}} Первые 20–50 строк файла вместе с заголовком — достаточно, чтобы увидеть типовые проблемы. Обязательная
{{TARGET_SCHEMA}} Желаемые колонки и типы: name (строка), phone (+7XXXXXXXXXX), date (ГГГГ-ММ-ДД). Обязательная
{{RULES}} Особые правила: что делать с дубликатами, чем считать пустое значение. Необязательно. Необязательная
{{LOCALE}} Локаль исходных данных: формат дат, десятичный разделитель, кодировка. Необязательно. Необязательная

Пример структурированного ответа

Пример вывода

1) Диагностика

  • Телефоны в трёх форматах: 8 (912) 345-67-89, +79123456789, 912-345-67-89 (строки 2, 7, 15).
  • Даты в двух форматах: 03.05.2026 и 2026/05/03 (строки 4, 9).
  • Пробелы и регистр в ФИО: иванов пётр, ИВАНОВ ПЕТР (строки 3, 11) — возможные дубликаты.
  • Десятичная запятая в сумме: 1 200,50 вместо 1200.50 (строка 6).
  • Пустой email в 4 строках из 50.

2) Правила нормализации

Колонка Проблема Правило Было → стало
phone Разные форматы Убрать всё кроме цифр, 8→+7, 11 цифр обязательно 8 (912) 345-67-89+79123456789
date Два формата Парсить оба, приводить к ISO 03.05.20262026-05-03
name Пробелы, регистр trim, схлопнуть пробелы, Title Case иванов пётрИванов Пётр
amount Запятая, пробелы Убрать пробелы, запятая → точка, float 1 200,501200.50
email Пустые Оставить пустым, счётчик в отчёт

3) Скрипт очистки

import pandas as pd
import re

df = pd.read_csv("input.csv", dtype=str, encoding="utf-8")

def norm_phone(v):
    if pd.isna(v):
        return None
    digits = re.sub(r"\D", "", v)
    if len(digits) == 11 and digits[0] in "78":
        return "+7" + digits[1:]
    return None  # не распознали — строка уйдёт в rejects

df["phone"] = df["phone"].map(norm_phone)
df["date"] = pd.to_datetime(df["date"], format="mixed", dayfirst=True,
                            errors="coerce").dt.strftime("%Y-%m-%d")
df["name"] = (df["name"].str.strip().str.split().str.join(" ").str.title())
df["amount"] = (df["amount"].str.replace(" ", "", regex=False)
                            .str.replace(",", ".", regex=False)
                            .astype(float))

bad = df["phone"].isna() | df["date"].isna()
df[bad].to_csv("rejects.csv", index=False)
df[~bad].to_csv("clean.csv", index=False)
print(f"чисто: {(~bad).sum()}, на ручной разбор: {bad.sum()}")

4) Отчёт

чисто: 46, на ручной разбор: 4 плюс счётчики пустых email.

5) Ручная проверка

В rejects.csv попадут строки с нераспознанным телефоном (меньше 11 цифр) и датами, которые не парсятся ни одним форматом, — их восстанавливает владелец данных.

Насколько полезен этот промпт? Есть идея, как улучшить? (напишите нам) Написать