Pandas DataFrame в Python: построение и фильтрация строк

Создайте pandas DataFrame в Python с помощью pd.DataFrame(data), передав словарь из списков одинаковой длины для столбцов и значений. Используйте DataFrame, когда записям нужны метки строк и столбцов, выборка столбцов или векторизованная фильтрация. Булева маска фильтрует табличные данные без написания цикла Python. Результат сохраняет исходные метки индексов, если вы явно не сбросите их.

Пример Python Pandas DataFrame Для Фильтрации Строк

Вывод:

Результат появится здесь...

Вывод:

product  units
Keyboard     12
 Monitor     15

Как Работает Этот Пример

  1. import pandas as pd даёт пакету его стандартный псевдоним pd.
  2. Конструктор pandas DataFrame превращает каждый ключ словаря в метку столбца. Поскольку оба списка содержат три значения, pandas создаёт три строки и назначает RangeIndex со значениями 0, 1 и 2.
  3. sales["units"] >= 10 создаёт булеву Series, выровненную по этому индексу. Передача маски обратно в sales[...] оставляет только строки со значением True.
  4. to_string(index=False) скрывает индекс в выводимой таблице; оно не удаляет и не перенумеровывает хранимые метки.

Что На Самом Деле Произошло При Запуске DataFrame

Запустите программу дважды на одной странице, открывая Run Details после каждого завершения. Это превращает панель в эксперимент с зависимостями вместо принятия длительности холодного запуска за бенчмарк DataFrame.

НаблюдениеХолодный рантаймТёплый рантайм на той же странице
Requests00
Новые доступные пакетыpandas 1.5.3, numpy 1.26.1, python-dateutil 2.8.2, six 1.16.0, pytz 2023.30
Что изменилосьpandas и его зависимости стали доступнырантайм уже имел их

web.run обнаруживает import pandas и загружает поддерживаемые пакеты до запуска Python пользователя. Run Details сообщает разницу между пакетами, доступными до и после запуска, поэтому пустой список Packages при тёплом запуске означает «ничего нового не загружено», а не «pandas не использовался».

Общая продолжительность первого запуска включает начальную загрузку пакетов и выполнение Python. Сравните её с тёплым запуском, прежде чем обвинять pd.DataFrame(...); время варьируется в зависимости от машины и состояния кэша, поэтому используйте список Packages для идентификации работы по начальной загрузке.

Оба запуска сообщают ноль пользовательских запросов, потому что словарь и фильтрация остаются локальными. Холодный запуск всё равно загружает файлы пакетов как активность рантайма. Поэтому «нет пользовательских запросов» доказывает, что фрагмент не делал внешних запросов, а не что браузер не передал ни одного байта.

Ловушка Отфильтрованного Индекса: loc — это не iloc

Фильтрация сохраняет метки. Здесь ready.index.tolist() равен [0, 2], хотя index=False делает вывод похожим на свежую таблицу из двух строк. Код, который обращается ко второй отображаемой строке по метке 1, завершится ошибкой:

Неправильно:

second_product = ready.loc[1, "product"]  # KeyError: 1

Правильно для второй строки по позиции:

second_product = ready.iloc[1]["product"]

Правильно, когда дальнейший код нуждается в последовательных метках:

ready = ready.reset_index(drop=True)
second_product = ready.loc[1, "product"]

Используйте .loc для меток индекса и .iloc для позиций с нулевой базой. Сбрасывайте индекс только тогда, когда новые метки являются частью ожидаемого результата; в противном случае сохранение исходных меток помогает отследить отфильтрованные строки обратно в исходные данные.

Ошибки Длины Конструктора DataFrame

Словарь списков должен описывать прямоугольную таблицу. pandas выбрасывает ValueError: All arrays must be of the same length вместо того, чтобы угадывать, как заполнить короткий столбец.

Неправильно:

pd.DataFrame({"product": ["Keyboard", "Mouse"], "units": [12]})

Правильно:

pd.DataFrame({"product": ["Keyboard", "Mouse"], "units": [12, None]})

Добавляйте явное пропущенное значение только тогда, когда оно честно представляет данные; иначе исправьте исходные записи перед построением таблицы.

Когда DataFrame — Правильный Контейнер

ВыборКогда подходит
DataFrameНесколько именованных столбцов нуждаются в булевой индексации, операциях над столбцами или табличном анализе
SeriesДостаточно одного именованного измерения
Список словарейНебольшая коллекция записей нуждается в итерации, но не в операциях над столбцами
NumPy arrayОднородные числовые данные нуждаются в матричных операциях без меток строк и столбцов

DataFrame оправдывает расходы на пакет и память, когда метки и векторизованные операции упрощают реальные преобразования. Используйте список словарей, когда записи небольшие и нужна только обычная итерация Python.