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.