DataFrame.itertuples()

Метод itertuples() возвращает итератор по строкам в виде namedtuple. Заметно быстрее, чем iterrows(), и сохраняет исходные типы данных.

Сигнатура

DataFrame.itertuples(index=True, name='Pandas')

Параметры

  • index — включать ли метку индекса как первое поле кортежа.

  • name — имя namedtuple-класса. None отключает создание класса (вернёт обычные кортежи — ещё быстрее).

Возвращаемое значение

Генератор namedtuple (или tuple, если name=None).

Примеры

Пример 1. Базовая итерация

import pandas as pd

df = pd.DataFrame({"temp": [22, 23], "humidity": [55, 60]})
for row in df.itertuples():
    print(row.Index, row.temp, row.humidity)
0 22 55
1 23 60

Пример 2. Без индекса

import pandas as pd

df = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
for row in df.itertuples(index=False):
    print(row)
Pandas(a=1, b=3)
Pandas(a=2, b=4)

Пример 3. Сохранение типов

import pandas as pd

df = pd.DataFrame({"a": [1, 2], "b": [1.5, 2.5]})
for row in df.itertuples(index=False):
    print(type(row.a).__name__, type(row.b).__name__)
int int
float float

В отличие от iterrows(), типы не «склеиваются» в общий dtype.

Пример 4. Самый быстрый вариант — без имён

import pandas as pd

df = pd.DataFrame({"a": [10, 20, 30], "b": [1, 2, 3]})
total = 0
for row in df.itertuples(index=False, name=None):
    total += row[0] * row[1]
print(total)
140

Пример 5. Лог команд робота

import pandas as pd

log = pd.DataFrame({
    "t":     [0.0, 0.5, 1.0],
    "cmd":   ["FWD", "LEFT", "STOP"],
    "speed": [150, 120, 0],
})
for r in log.itertuples(index=False):
    print(f"{r.t:.1f}s  {r.cmd:5s} speed={r.speed}")
0.0s  FWD   speed=150
0.5s  LEFT  speed=120
1.0s  STOP  speed=0

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.