Метод itertuples
Метод itertuples применяется к DataFrame
и возвращает итератор, генерирующий именованные кортежи для
каждой строки таблицы. В отличие от iterrows, этот метод
работает быстрее и потребляет меньше памяти, поэтому
рекомендуется к использованию при обходе строк.
Параметр index управляет включением индекса
в кортеж (по умолчанию True). Параметр name
позволяет задать имя для создаваемого именованного кортежа
(по умолчанию 'Pandas').
Синтаксис
df.itertuples([index=True[, name='Pandas']])
Пример
Давайте пройдём по строкам таблицы и выведем каждую строку как кортеж:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
for row in df.itertuples():
print(row)
Результат выполнения кода:
Pandas(Index=0, a=1, b=10)
Pandas(Index=1, a=2, b=20)
Pandas(Index=2, a=3, b=30)
Pandas(Index=3, a=4, b=40)
Pandas(Index=4, a=5, b=50)
Пример
Теперь обратимся к отдельным полям кортежа по имени
столбца или атрибуту Index:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
for row in df.itertuples():
print(f"Index: {row.Index}, a: {row.a}, b: {row.b}")
Результат выполнения кода:
"Index: 0, a: 1, b: 10"
"Index: 1, a: 2, b: 20"
"Index: 2, a: 3, b: 30"
"Index: 3, a: 4, b: 40"
"Index: 4, a: 5, b: 50"
Пример
Если индексы не нужны, их можно отключить с помощью index:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
for row in df.itertuples(index=False):
print(row)
Результат выполнения кода:
Pandas(a=1, b=10)
Pandas(a=2, b=20)
Pandas(a=3, b=30)
Pandas(a=4, b=40)
Pandas(a=5, b=50)
Пример
Имя кортежа можно задать через параметр name
для лучшей читаемости:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
for row in df.itertuples(name='RowData'):
print(row)
Результат выполнения кода:
RowData(Index=0, a=1, b=10)
RowData(Index=1, a=2, b=20)
RowData(Index=2, a=3, b=30)
RowData(Index=3, a=4, b=40)
RowData(Index=4, a=5, b=50)
Пример
Метод можно использовать для фильтрации строк по условию:
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 20, 30, 40, 50]
})
res = [row for row in df.itertuples() if row.a > 3]
print(res)
Результат выполнения кода:
[Pandas(Index=3, a=4, b=40), Pandas(Index=4, a=5, b=50)]