0Pricing
Pandas & NumPy Academy · Урок

Чтение файлов Excel и JSON

Импортируйте книги Excel с помощью pd.read_excel и записи JSON с помощью pd.read_json, обрабатывая распространённые варианты формата

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

Почему важны Excel и JSON

Хотя CSV является универсальным форматом, файлы Excel (.xlsx/.xls) — основной формат бизнес-данных, которыми обмениваются по электронной почте и с помощью инструментов подготовки отчётов. JSON — нативный формат REST API и баз данных NoSQL. Pandas предоставляет pd.read_excel() и pd.read_json(), чьи API аналогичны API средства чтения CSV, поэтому полученные навыки можно применять напрямую.

import pandas as pd

# The three most common load functions share the same philosophy
df_csv   = pd.read_csv('data.csv')
df_excel = pd.read_excel('data.xlsx')
df_json  = pd.read_json('data.json')

Установка средства чтения Excel

Для чтения файлов Excel требуется средство обработки: openpyxl для файлов .xlsx (современный формат) и xlrd для старых файлов .xls. Установите его с помощью команды pip install openpyxl. Pandas автоматически выбирает средство обработки по расширению файла. Для записи используйте xlsxwriter, если требуется расширенное форматирование. Если средство обработки не установлено, read_excel() вызывает ошибку ModuleNotFoundError.

# Install the required engine:
# pip install openpyxl          # for .xlsx (modern)
# pip install xlrd==1.2.0       # for .xls (legacy)

import pandas as pd
df = pd.read_excel('report.xlsx', engine='openpyxl')

Выбор листа с помощью sheet_name

Книги Excel могут содержать несколько листов. Параметр sheet_name= задаёт лист для чтения: передайте строку (имя листа), целое число (позицию, начиная с 0) или список, чтобы прочитать несколько листов в словарь. Передайте sheet_name=None, чтобы прочитать все листы в словарь, ключами которого будут имена листов. Проверка доступных листов с помощью pd.ExcelFile('file.xlsx').sheet_names — хорошая отправная точка.

import pandas as pd

# Read the second sheet
df = pd.read_excel('workbook.xlsx', sheet_name=1)

# Read by name
df = pd.read_excel('workbook.xlsx', sheet_name='Sales')

# Inspect available sheets
xl = pd.ExcelFile('workbook.xlsx')
print(xl.sheet_names)  # ['Summary', 'Sales', 'Costs']

Распространённые параметры Excel

pd.read_excel() поддерживает большинство тех же параметров, что и read_csv(): header=, index_col=, usecols=, skiprows=, dtype= и nrows=. Для Excel параметр usecols также принимает строку с диапазоном столбцов Excel, например 'A:C' или 'A,C,E'. Это удобно, если буквы столбцов известны из структуры электронной таблицы.

import pandas as pd

df = pd.read_excel(
    'sales_report.xlsx',
    sheet_name='Q1',
    header=2,          # header is on row 3 (0-indexed)
    usecols='A:D',     # Excel column range
    skiprows=[3, 4],   # skip rows 4 and 5
    nrows=100
)

Чтение JSON: форматы orient

pd.read_json() считывает JSON в DataFrame. Параметр orient= задаёт структуру JSON: 'records' (список словарей строк), 'columns' (словарь массивов столбцов, значение по умолчанию), 'index' (словарь словарей строк, ключами которого являются индексы) или 'values' (необработанный массив). Большинство REST API возвращают формат 'records' — всегда сначала проверяйте исходный JSON, чтобы определить правильное значение orient.

import pandas as pd

# REST API response: list of records
json_str = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'
df = pd.read_json(json_str, orient='records')
print(df)

Чтение JSON из файла или URL

pd.read_json() принимает путь к файлу, URL или непосредственно строку JSON. Для глубоко вложенного JSON (например, ответов API с вложенными объектами) вместо этого используйте json_normalize() из модуля pandas.io.json: он преобразует вложенные словари в столбцы с именами, разделёнными точками.

import pandas as pd
from pandas.io.json import json_normalize

# From a file
df = pd.read_json('events.json')

# Flatten nested JSON
nested = [{'id': 1, 'user': {'name': 'A', 'age': 30}},
          {'id': 2, 'user': {'name': 'B', 'age': 25}}]
df_flat = json_normalize(nested)
print(df_flat.columns.tolist())  # ['id', 'user.name', 'user.age']

Формат JSON Lines

JSON Lines (NDJSON) хранит один объект JSON в каждой строке, что упрощает потоковую обработку больших наборов данных. Используйте pd.read_json('file.jsonl', lines=True), чтобы разобрать этот формат. Он часто применяется в файлах журналов, экспорте из Kafka и форматах наборов данных для машинного обучения. Каждая строка должна быть допустимым объектом JSON; строки с неверным форматом приводят к сбою чтения.

import pandas as pd

# file.jsonl contains one JSON record per line:
# {"id": 1, "event": "click"}
# {"id": 2, "event": "view"}
df = pd.read_json('events.jsonl', lines=True)
print(df)

Обработка дат при чтении JSON

В JSON нет встроенного типа даты — даты хранятся в виде строк или меток времени Unix (миллисекунд или секунд с начала эпохи). Установите convert_dates=True (значение по умолчанию), чтобы Pandas попытался автоматически преобразовать столбцы, в именах которых содержатся 'date', 'time' или 'at'. Для нестандартных имён столбцов или меток времени выполните явное преобразование с помощью pd.to_datetime(df['col'], unit='ms').

import pandas as pd

# Unix milliseconds timestamp column
df = pd.read_json('events.json', orient='records')
df['created_at'] = pd.to_datetime(df['created_at'], unit='ms')
print(df['created_at'].dtype)  # datetime64[ns]

Сравнение особенностей Excel и JSON

Особенности Excel: объединённые ячейки создают строки с NaN, скрытые строки и столбцы включаются в результат, а числовое форматирование (например, даты, сохранённые в виде чисел с плавающей точкой) необходимо исправлять после загрузки. Особенности JSON: неодинаковое наличие полей в разных записях приводит к появлению NaN, а целочисленные ключи в объекте JSON превращаются в строковые имена столбцов.

import pandas as pd

# Excel date stored as float (Excel serial date)
df = pd.read_excel('old_report.xls')
# If dates appear as floats (e.g., 44927.0), convert:
# from xlrd import xldate_as_datetime
# df['date'] = df['date'].apply(lambda x: xldate_as_datetime(x, 0))

pd.ExcelFile для нескольких листов

Если нужно эффективно прочитать несколько листов из одного файла, откройте контекстный менеджер pd.ExcelFile и вызывайте parse(sheet_name) для каждого листа. Это позволяет не открывать и не разбирать файл заново для каждого листа — особенно важно при работе с большими книгами. Контекстный менеджер автоматически закрывает дескриптор файла.

import pandas as pd

with pd.ExcelFile('annual_report.xlsx') as xf:
    df_q1 = xf.parse('Q1')
    df_q2 = xf.parse('Q2')

print(df_q1.shape, df_q2.shape)

Использование requests для загрузки JSON API

Для данных REST API используйте библиотеку requests, чтобы получить JSON, а затем передайте разобранный объект Python в pd.DataFrame() или pd.json_normalize(). Такой подход отделяет работу с HTTP от разбора данных и позволяет обработать заголовки, аутентификацию и постраничную загрузку до того, как Pandas начнёт работать с данными.

import pandas as pd
import requests

response = requests.get('https://api.example.com/records')
data = response.json()   # Python list of dicts
df = pd.DataFrame(data)
print(df.head())

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

Проверьте своё понимание чтения файлов Excel и JSON с помощью Pandas из этого урока.

Повторение урока

В этом уроке Вы узнали: pd.read_excel() считывает файлы xlsx и позволяет указать загружаемый лист с помощью sheet_name, pd.read_json() обрабатывает несколько структур JSON, задаваемых параметром orient, а json_normalize() преобразует вложенные объекты JSON в плоский DataFrame. Далее мы рассмотрим экспорт DataFrame в файлы CSV и Excel для обмена и последующей обработки.

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

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

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

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

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

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

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

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

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

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

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

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

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