English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
поведение базового итерирования объектов Pandas зависит от типа. При итерировании по Series оно эквивалентно массиву. Другие структуры данных (например, DataFrame и Panel) следуют грамматике, аналогичной dict, то есть итерирование по ключам объекта.
Коротко, базовая итерация (for i в объекте) produces −
Series − значение DataFrame − колонка метка Panel − item метка
Итерация DataFrame даст имена колонок. Давайте посмотрим на следующий пример.
import pandas as pd import numpy as np N=20 df = pd.DataFrame({ ']A': pd.date_range(start='2016-01-01',periods=N,freq='D'), ']x': np.linspace(0,stop=N-1,num=N), ']y': np.random.rand(N), ']C': np.random.choice(['Low','Medium','High'],N).tolist(), ']D': np.random.normal(100, 10, size=(N)).tolist() }) for col in df: print col
Его вывод следующий
A C D x y
Чтобы пройди строки DataFrame, можно использовать следующие функции-
iteritems() − Итерируй пары (ключ, значение) iterrows() − Пройди строки в виде пары (index,series) itertuples() − Пройди строки в виде namedtuples
Пройди каждую колонку в качестве ключа, а пары значений с метками в качестве ключа, а значения колонки в качестве объекта Series.
import pandas as pd import numpy as np df = pd. DataFrame(np. random.randn(4,3),columns=[ ']col1', ']col2', ']col3']) for ключ,значение в df. iteritems(): print ключ,значение
Результат выполнения:
col1 0 0.802390 1 0.324060 2 0.256811 3 0.839186 Имя: col1, тип данных: float64 col2 0 1.624313 1 -1.033582 2 1.796663 3 1.856277 Имя: col2, тип данных: float64 col3 0 -0.022142 1 -0.230820 2 1.160691 3 -0.830279 Имя: col3, тип данных: float64
可以看出, каждый столбец итерируется как значение ключ-значение в серии.
Итератор iterrows() возвращает итератор, который генерирует значения каждого индекса и последовательность, содержащую данные каждой строки.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3']) for row_index, row in df.iterrows(): print row_index, row
Результат выполнения:
0 col1 1.529759 col2 0.762811 col3 -0.634691 Имя: 0, тип данных: float64 1 col1 -0.944087 col2 1.420919 col3 -0.507895 Имя: 1, тип данных: float64 2 col1 -0.077287 col2 -0.858556 col3 -0.663385 Имя: 2, тип данных: float64 3 col1 -1.638578 col2 0.059866 col3 0.493482 Имя: 3, тип данных: float64
Поскольку iterrows() итерирует строки, данные типа строки не сохраняются. 0,1,2 - это индексы строк, col1, col2, col3 - это индексы столбцов.
Метод itertuples() возвращает итератор, который генерирует命名为 кортеж для каждой строки DataFrame. Первый элемент кортежа будет соответствующим значением индекса строки, а оставшиеся значения будут значениями строки.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3']) for row in df.itertuples(): print row
Результат выполнения:
Pandas(Индекс=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=- 0.6346908238310438) Pandas(Индекс=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=- 0.50789517967096232) Pandas(Индекс=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=- 0.6633852507207626) Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969, col3=0.80344487462316527)
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3']) for index, row in df.iterrows(): row['a'] = 10 print df
Результат выполнения:
col1 col2 col3 0 -1.739815 0.735595 -0.295589 1 0.635485 0.106803 1.527922 2 -0.939064 0.547095 0.038585 3 -1.016509 -0.116580 -0.523158
Обратите внимание, что никаких изменений не отражено.