Як очистити Excel або CSV у Python швидко
19.04.2026Excel і CSV-файли часто приходять у “живому” вигляді: з порожніми комірками, дублями, різними форматами дат, зайвими пробілами та помилками в назвах колонок. Якщо працювати з такими даними вручну, це забирає багато часу. У Python же більшість типових проблем можна вирішити за один короткий сценарій, і для цього не потрібно бути експертом з аналізу даних.
У цій статті покажу простий підхід до очищення Excel або CSV за допомогою бібліотеки pandas. Він підійде для щоденних задач: підготувати таблицю для звіту, імпорту в іншу систему, аналізу або подальшої автоматизації.
Що саме будемо очищати
Найчастіше у табличних даних трапляються такі проблеми:
- порожні значення в ключових колонках;
- дублікати рядків;
- зайві пробіли на початку або в кінці тексту;
- неоднаковий регістр символів;
- неправильні типи даних, наприклад числа, збережені як текст;
- дивні або незручні назви колонок;
- зайві рядки з підсумками чи примітками.
Хороша новина в тому, що більшість із цього можна виправити кількома рядками коду.
Підготовка: що потрібно встановити
Для роботи з Excel і CSV найзручніше використати pandas. Якщо ви ще не встановили бібліотеку, зробіть це в терміналі:
pip install pandas openpyxl
Пакет openpyxl потрібен для читання та запису файлів Excel у форматі .xlsx.
Завантажуємо файл у Python
Почнемо з того, що відкриємо CSV або Excel-файл у DataFrame. Нижче два варіанти:
import pandas as pd
df = pd.read_csv('data.csv')
або
import pandas as pd
df = pd.read_excel('data.xlsx')
Після цього можна подивитися на перші рядки:
print(df.head())
Це допоможе швидко зрозуміти, які саме проблеми є у файлі.
Крок 1. Прибираємо зайві пробіли
Одна з найпоширеніших проблем — текстові поля з пробілами на початку або в кінці. Через це можуть не працювати фільтри, пошук або об’єднання таблиць.
df = df.map(lambda x: x.strip() if isinstance(x, str) else x)
Якщо у вас стара версія pandas і map не підходить для всього DataFrame, можна обробити лише текстові колонки:
text_cols = df.select_dtypes(include='object').columns
df[text_cols] = df[text_cols].apply(lambda col: col.str.strip())
Це одразу робить дані акуратнішими.
Крок 2. Нормалізуємо назви колонок
Назви колонок іноді виглядають як ' Full Name ' або 'E-mail Address'. Для автоматизації краще мати прості й однакові назви.
Можна перетворити їх на нижній регістр і замінити пробіли на підкреслення:
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
Після цього замість Full Name буде full_name. Це зручно для коду й зменшує ризик помилок.
Крок 3. Видаляємо дублікати
Дублікати часто виникають після ручного об’єднання файлів або експорту з різних систем. Їх легко прибрати:
df = df.drop_duplicates()
Якщо потрібно видалити дублікати лише за певними колонками, наприклад за email або ID, використайте:
df = df.drop_duplicates(subset=['email'])
Це особливо корисно, коли один і той самий клієнт або запис потрапив у таблицю кілька разів.
Крок 4. Обробляємо пропуски
Пропущені значення — ще одна типова ситуація. Спочатку варто подивитися, де їх найбільше:
print(df.isna().sum())
Далі є кілька варіантів дій:
- видалити рядки з пропусками у важливих колонках;
- заповнити значення за замовчуванням;
- залишити пропуски, якщо вони не критичні.
Приклад видалення рядків, де немає значення в колонці email:
df = df.dropna(subset=['email'])
Приклад заповнення порожніх значень у колонці city словом “Невідомо”:
df['city'] = df['city'].fillna('Невідомо')
Тут важливо не механічно видаляти все підряд, а розуміти, які поля критичні саме для вашої задачі.
Крок 5. Приводимо текст до єдиного формату
Коли в одній таблиці є значення kyiv, Kyiv і KYIV, аналітика може показувати їх як різні варіанти. Щоб цього уникнути, краще уніфікувати регістр.
Наприклад, перевести всі назви міст у нижній регістр:
df['city'] = df['city'].str.lower()
Або, навпаки, зробити текст “акуратним” у стилі заголовків:
df['city'] = df['city'].str.title()
Для прізвищ, назв товарів і категорій це часто дуже допомагає.
Крок 6. Виправляємо типи даних
Інколи числа зберігаються як текст, наприклад '1200' замість 1200. Через це не працюють обчислення, сортування або графіки. Перетворити колонку на числовий тип можна так:
df['price'] = pd.to_numeric(df['price'], errors='coerce')
Якщо у колонці є некоректні значення, вони стануть пропусками, а потім їх можна обробити окремо. Для дат:
df['date'] = pd.to_datetime(df['date'], errors='coerce')
Після цього з датами можна працювати як з датами, а не як з текстом.
Крок 7. Прибираємо зайві рядки та колонки
У реальних файлах часто є службові рядки, підсумки, коментарі або колонки, які не потрібні для аналізу. Їх теж можна прибрати.
Наприклад, видалити колонку:
df = df.drop(columns=['notes'])
Або залишити лише потрібні колонки:
df = df[['id', 'name', 'email', 'city', 'price']]
Це зменшує “шум” у таблиці та робить її простішою для подальшої роботи.
Міні-скрипт на 15 хвилин
Ось компактний приклад, який поєднує основні кроки очищення:
import pandas as pd
df = pd.read_csv('data.csv')
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
text_cols = df.select_dtypes(include='object').columns
df[text_cols] = df[text_cols].apply(lambda col: col.str.strip())
df = df.drop_duplicates()
df = df.dropna(subset=['email'])
df['city'] = df['city'].fillna('Невідомо').str.title()
df['price'] = pd.to_numeric(df['price'], errors='coerce')
df['date'] = pd.to_datetime(df['date'], errors='coerce')
df.to_csv('clean_data.csv', index=False)
Для Excel замініть read_csv на read_excel, а збереження — на to_excel.
Як зберегти результат
Після очищення файл потрібно записати назад. Для CSV:
df.to_csv('clean_data.csv', index=False)
Для Excel:
df.to_excel('clean_data.xlsx', index=False)
Параметр index=False прибирає службовий індекс, який зазвичай не потрібен у готовому файлі.
Підсумок
Очистити Excel або CSV у Python можна дуже швидко, якщо знати базові прийоми. У більшості випадків достатньо прибрати пробіли, стандартизувати назви колонок, видалити дублікати, обробити пропуски та виправити типи даних. Це вже значно підвищує якість таблиці та економить час у майбутньому.
Головна ідея проста: не намагайтеся вручну правити кожен рядок. Краще один раз написати короткий шаблон очищення і використовувати його для схожих файлів знову і знову.