Чтение файлов 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 — локальная установка не требуется.
Все уроки этого курса
- Чтение CSV-файлов
- Чтение файлов Excel и JSON
- Запись DataFrames в файлы
- Чтение из URL и StringIO