Как починить 'Unnamed: 0' в Pandas — полное руководство
Колонка 'Unnamed: 0' — одна из самых гуглимых ошибок Pandas. Появляется, когда CSV сохранили через df.to_csv() без index=False, записав индекс DataFrame как безымянную первую колонку. Вот четыре способа починить.
Метод 1: Предотвратить (лучший)
При сохранении: df.to_csv('data.csv', index=False). Это опускает колонку индекса полностью. Если индекс несёт осмысленные данные (например, дата как индекс) — назовите его сначала: df.index.name = 'date'. Тогда Pandas запишет нормальный заголовок.
Метод 2: Починить при чтении
При загрузке CSV с уже присутствующим безымянным индексом: df = pd.read_csv('data.csv', index_col=0). Это говорит Pandas трактовать колонку 0 как индекс, а не данные. Имя 'Unnamed: 0' исчезает, потому что становится индексом, а не колонкой данных.
Метод 3: Убрать колонку после загрузки
Если вы уже загрузили DataFrame: df = df.drop(columns=['Unnamed: 0']). Или надёжнее: df = df.loc[:, ~df.columns.str.contains('^Unnamed')]. Это убирает ВСЕ безымянные колонки независимо от их числа.
Метод 4: Починить сам CSV
Если нужно починить CSV один раз и поделиться (например, залить в БД, отправить коллеге): используйте CSV First Aid. Бросьте файл, фикс 'Pandas unnamed index' автоматически находит и удаляет колонку, скачиваете чистый CSV.
Это лучший подход, когда: вы не контролируете код, читающий файл; делитесь с не-Python-пользователями; хотите починить навсегда, а не добавлять index_col=0 везде.
Почему это вообще происходит?
to_csv() Pandas включает индекс по умолчанию, потому что у DataFrame всегда есть индекс. Когда создаёте DataFrame из списка или словаря без указания индекса — Pandas автогенерит RangeIndex (0, 1, 2, ...). Экспорт пишет это как первую колонку без имени.
При повторном чтении Pandas не может отличить это от настоящей колонки данных — загружает как данные и генерит имя 'Unnamed: 0' (потому что ячейка заголовка пуста).
Нет Python? CSV First Aid убирает колонку Unnamed: 0 прямо в браузере.
Почините CSV сейчас →Похожие инструменты
Убрать колонку 'Unnamed: 0' из CSV
Первая колонка без названия, содержит 0, 1, 2, 3…? Кто-то запустил to_csv() без index=False. Находим утечку индекса и убираем — реальные данные возвращаются в колонку A.
Починить заголовки CSV
Две колонки обе 'Name' и ваш SQL-импорт падает, или Pandas молча переименовывает в Name и Name.1. Переименовываем дубли в Name, Name_1, Name_2 — импорт перестаёт падать.
Убрать пустые строки из CSV
Пустые строки прячутся между данными и ломают подсчёт строк, импорт, каждый SUM(). Мы сканируем каждую строку и удаляем те, где все ячейки пусты. Хоть одно значение — строка остаётся.