📥 Как загрузить и сохранить данные в Pandas
Pandas работает с файлами самых разных форматов. Таблицу можно создать прямо в коде.
🆕 Создание DataFrame с нуля
import pandas as pd
df = pd.DataFrame({
'город': ['Москва', 'СПб'],
'продажи': [15000, 12000]
})
print(df)Таблица готова.
⌛ Загрузить / сохранить файл
• Загрузить (файл → DataFrame): pd.read_*()
• Сохранить (DataFrame → файл): df.to_*()
pd.read_csv('data.csv')
↑ ↑ ↑
│ │ путь к файлу
│ функция чтения (возвращает DataFrame)
библиотека pandas
# ( ) — вызов функции📖 Распространённые форматы
📄 CSV (популярный формат)
pd.read_csv() / df.to_csv()Универсальный, человекочитаемый, но медленный и большой
📊 Excel
pd.read_excel() / df.to_excel()Много листов; для обмена с нетехническими специалистами
🌐 JSON
pd.read_json() / df.to_json()API, логи
🥒 Pickle (только для временных файлов на своей машине)
pd.read_pickle() / df.to_pickle()Бинарный, быстрый, сохраняет типы, но небезопасен (может выполнить код). Не открывать из непроверенных источников!
📦 Parquet (лучший выбор для больших данных)
pd.read_parquet() / df.to_parquet()Современный столбцовый формат, сжатие до 10x, быстрый, безопасный; лучший для больших данных
🧑🎓 Пример CSV
CSV — всегда один «лист» (плоская таблица). Не поддерживает множественные листы.
# Чтение
df = pd.read_csv('file.csv', sep=';', encoding='utf-8')
# Сохранение
df.to_csv('file.csv', index=False, sep=';', encoding='utf-8-sig')⚠️ Проблемы:
- sep — разделитель (, или ;), иначе всё склеится в один столбец
- encoding — для кириллицы 'cp1251' или 'utf-8', иначе кракозябры
- header=None — если в файле нет заголовка (столбцы назовутся по умолчанию: 0,1,2…)
- index_col — какой столбец сделать индексом при открытии (обычно не трогаем)
➕ Полезно:
- index=False – не создает лишний столбец с номерами строк при сохранении файла
- encoding='utf-8-sig' – для совместимости с Excel
📊 Пример Excel (много листов / worksheets)
При загрузке указываем sheet_name (имя или номер). По умолчанию загрузится только первый лист. Загрузить все листы — sheet_name=None (получится словарь DataFrame'ов)
# Загрузить конкретный лист
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')# Загрузить все листы в словарь
all_sheets = pd.read_excel('file.xlsx', sheet_name=None)# Сохранить
df.to_excel('out.xlsx', index=False)📥 Другие форматы (кратко)
# JSON
df = pd.read_json('file.json')
df.to_json('out.json', orient='records') # orient='records' — превращает таблицу в JSON-список, где каждый элемент — словарь: ключи — названия столбцов, значения — данные строки# Pickle (небезопасно)
df = pd.read_pickle('file.pkl')
df.to_pickle('out.pkl')# Parquet
df = pd.read_parquet('file.parquet')
df.to_parquet('out.parquet', compression='snappy') # compression='snappy' — алгоритм сжатия для Parquet🔥 Чтение из буфера обмена — для быстрых тестов
# скопировать таблицу в буфер (Ctrl+C), затем выполнить:
df = pd.read_clipboard()
# Pandas сам считает данные из буфера и создаст DataFrame⚡️ Чтение больших файлов кусками / чанками
Если файл > 1 ГБ и не влезает в память — его читают по кускам.
chunks = pd.read_csv('big_file.csv', chunksize=10000)
for chunk in chunks: # цикл, который перебирает все куски (chunks) один за другим
print(len(chunk)) # обрабатываем кусок- chunksize=N – возвращает итератор, выдающий следующий кусок
- Каждый кусок – обычный DataFrame, после обработки удаляется из памяти
Пример: накопить сумму без загрузки всех данных
total = 0
for chunk in pd.read_csv('big.csv', chunksize=100000):
total += chunk['sales'].sum()
print(total)❌ Что нельзя с чанками?
Операции вроде merge или groupby без агрегации требуют всех данных сразу. Для них нужны Dask / Spark.
✅ Чек-лист
• Загрузить через pd.read_*()
• Сохранить через df.to_*() с index=False
• Чтение из буфера pd.read_clipboard()
• Parquet — лучший формат
• Большой файл читать чанками (chunksize)
💬 Далее:
Первичный осмотр данных в Pandas