0Pricing
Pandas & NumPy Academy · Урок

Чтение CSV-файлов

Загружайте CSV-файлы с помощью pd.read_csv, настраивайте разделители, строки заголовка и индексные столбцы и просматривайте результат

«Чтение CSV-файлов» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Почему CSV — универсальный формат

CSV (значения, разделённые запятыми) — самый распространённый формат обмена табличными данными. Он понятен человеку, поддерживается всеми базами данных, электронными таблицами и инструментами аналитики и не требует определения схемы. pd.read_csv() — наиболее часто вызываемая функция Pandas в анализе данных, поскольку практически любой общедоступный набор данных, экспорт API или дамп базы данных доступен в формате CSV.

import pandas as pd

# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())

Базовый вызов read_csv()

Единственный обязательный аргумент — путь к файлу (строка или объект Path). По умолчанию Pandas предполагает, что первая строка является заголовком (именами столбцов), разделителем служит запятая, а значения автоматически получают подходящие типы данных. Полученный DataFrame имеет стандартный целочисленный RangeIndex. Сразу после загрузки всегда вызывайте df.info(), чтобы обнаружить проблемы с определением типов.

import pandas as pd

df = pd.read_csv('products.csv')

# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
                 sep=',',
                 header=0,
                 index_col=None)

Управление разделителем

Используйте параметр sep=, чтобы указать разделитель, отличный от запятой. В файлах с разделителями-табуляциями (TSV) используется sep='\t'. В некоторых европейских экспортируемых файлах в качестве разделителей используются точки с запятой (sep=';'), поскольку запятые служат десятичными разделителями. Передайте sep=None, engine='python', чтобы Pandas автоматически определил разделитель по содержимому файла.

import pandas as pd

# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')

# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')

# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')

Заголовок и skiprows

Если в CSV нет строки заголовка, задайте header=None, и Pandas присвоит столбцам целочисленные имена (0, 1, 2, ...). Укажите собственные имена с помощью names=['a', 'b', 'c']. Используйте skiprows=n, чтобы пропустить первые n строк (например, метаданные или комментарии в начале файла). Параметр skiprows также принимает список конкретных номеров строк для пропуска.

import pandas as pd

# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
                 names=['id', 'value', 'category'])

# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)

Настройка столбца индекса

index_col= указывает, какой столбец использовать в качестве индекса строк. Передайте имя столбца или его целочисленную позицию. Установка осмысленного индекса (например, столбца с датой или уникального ID) обеспечивает быстрый доступ по меткам с помощью .loc и необходима перед операциями над временными рядами. Для MultiIndex передайте список.

import pandas as pd

# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype)  # datetime64[ns]

# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)

Разбор дат при загрузке

parse_dates=True указывает Pandas попытаться преобразовать индекс в тип datetime. Передайте список имён столбцов в parse_dates=['col1', 'col2'], чтобы разобрать как даты определённые столбцы, не являющиеся индексом. Pandas автоматически пытается распознать распространённые форматы; для необычных форматов используйте date_format=. Разбор дат во время загрузки позволяет избежать повторных вызовов pd.to_datetime() в дальнейшем.

import pandas as pd

# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
                 parse_dates=['order_date'])
print(df['order_date'].dtype)  # datetime64[ns]

Выбор столбцов с помощью usecols

usecols=['col1', 'col2'] загружает только указанные столбцы, игнорируя остальные. Это особенно важно для больших CSV-файлов: нет необходимости читать файл с 200 столбцами, если нужны только 5. Это значительно сокращает время ввода-вывода и объём используемой памяти. Передайте вызываемый объект, чтобы выбирать столбцы по шаблону имени.

import pandas as pd

# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
                 usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist())  # ['user_id', 'event', 'timestamp']

Управление типами данных при загрузке

Pandas определяет типы данных автоматически, но это определение может быть ошибочным: столбец ID, состоящий из числовых строк, превращается в int64, а столбец с ценами и пропущенными значениями неожиданно становится float64. Используйте dtype={'col': str}, чтобы явно задать типы. Это также эффективнее: предварительное указание типов пропускает этап их определения и может ускорить загрузку больших файлов на 20–30%.

import pandas as pd

df = pd.read_csv('orders.csv', dtype={
    'order_id': str,      # keep as string (not int)
    'price': float,
    'quantity': 'int32'   # use smaller int
})

Обработка пропущенных значений при загрузке

По умолчанию Pandas распознаёт множество обозначений пропущенных значений: пустые ячейки, 'NA', 'NaN', 'N/A', 'null' и другие. Используйте na_values=['?', '-', 'missing'], чтобы добавить собственные обозначения. Используйте keep_default_na=False, чтобы отключить встроенный список и считать пропущенными только указанные Вами значения. Это предотвращает случайное преобразование настоящих строковых значений вроде 'NA' (аббревиатуры) в NaN.

import pandas as pd

df = pd.read_csv('survey.csv',
                 na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())

nrows и chunksize для больших файлов

nrows=100 загружает только первые 100 строк — это идеально для быстрой проверки схемы огромного файла. chunksize=10000 возвращает итератор TextFileReader, который выдаёт DataFrames по 10000 строк, обеспечивая поэтапную обработку файлов, не помещающихся в RAM. Подробно поэтапное чтение рассматривается в продвинутом уроке по производительности.

import pandas as pd

# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)

# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
    print(chunk.shape)  # process each chunk

Распространённые проблемы с read_csv

Обратите внимание на следующие частые проблемы: ошибки кодировки (используйте encoding='utf-8' или 'latin-1'), начальные пробелы в именах столбцов (используйте skipinitialspace=True), разделители тысяч в числах (используйте thousands=',') и десятичные запятые в европейских числах (используйте decimal=',' и sep=';'). Если их не учитывать, каждая из этих проблем незаметно превращает числовые столбцы в столбцы типа object.

import pandas as pd

# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
                 sep=';',
                 decimal=',',
                 thousands='.',
                 encoding='utf-8',
                 skipinitialspace=True)

Быстрая проверка

Проверьте, насколько хорошо Вы поняли чтение CSV-файлов с помощью Pandas из этого урока.

Итоги урока

В этом уроке Вы узнали: pd.read_csv() — основная функция для загрузки табличных данных с множеством параметров настройки, sep, header, index_col и parse_dates управляют интерпретацией файла, а usecols и dtype повышают производительность и обеспечивают безопасность типов при работе с большими файлами. Далее мы рассмотрим чтение файлов Excel и JSON, у которых есть собственные параметры, зависящие от формата.

Часто задаваемые вопросы

Урок «Чтение CSV-файлов» бесплатный?

Да — полный текст урока «Чтение CSV-файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Чему я научусь в уроке «Чтение CSV-файлов»?

Загружайте CSV-файлы с помощью pd.read_csv, настраивайте разделители, строки заголовка и индексные столбцы и просматривайте результат Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?

Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Чтение CSV-файлов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?

Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение CSV-файлов
  2. Чтение файлов Excel и JSON
  3. Запись DataFrames в файлы
  4. Чтение из URL и StringIO
← Назад к Pandas & NumPy Academy