Việc lặp lại cơ bản các đối tượng Pandas phụ thuộc vào kiểu dữ liệu. Khi lặp qua một Series, nó được coi là giống như mảng và phép lặp cơ bản tạo ra các giá trị. Đối với các cấu trúc dữ liệu khác, như DataFrame và Panel, ta lặp qua các key của các đối tượng.
Tóm lại, phép lặp cơ bản (đối với i trong đối tượng) như sau :
- Series − Giá trị
- DataFrame − các key trong cột
- Panel − các item
1. Duyệt trong Dataframe :
Duyệt một DataFrame bởi các tên cột. Xem xét ví dụ sau để hiểu :
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
Kết quả :
A
C
D
x
y
Để lặp lại các hàng của DataFrame, chúng ta có thể sử dụng các hàm sau:
- iteritems() − để lặp qua các cặp (khóa, giá trị)
- iterrows() − lặp qua các hàng dưới dạng cặp (index,series)
- itertuples() − lặp qua các hàng dưới dạng các tệp đã đặt tên
2. iteritems()
Duyệt từng cột dưới dạng khóa, cặp giá trị với nhãn là khóa và giá trị cột dưới dạng đối tượng Dòng.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
for key,value in df.iteritems():
print key,value
Kết quả :
col1 0 0.802390
1 0.324060
2 0.256811
3 0.839186
Name: col1, dtype: float64
col2 0 1.624313
1 -1.033582
2 1.796663
3 1.856277
Name: col2, dtype: float64
col3 0 -0.022142
1 -0.230820
2 1.160691
3 -0.830279
Name: col3, dtype: float64
mỗi cột được lặp lại riêng biệt dưới dạng một cặp khóa-giá trị trong series.
3. iterrows()
iterrows () trả về từng giá trị index cùng với một series chứa dữ liệu trong mỗi hàng.
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
Kết quả :
0 col1 1.529759
col2 0.762811
col3 -0.634691
Name: 0, dtype: float64
1 col1 -0.944087
col2 1.420919
col3 -0.507895
Name: 1, dtype: float64
2 col1 -0.077287
col2 -0.858556
col3 -0.663385
Name: 2, dtype: float64
3 col1 -1.638578
col2 0.059866
col3 0.493482
Name: 3, dtype: float64
Lưu ý – Vì iterrows () lặp qua các hàng nên nó không bảo toàn kiểu dữ liệu trên hàng. 0,1,2 là các chỉ số hàng và col1, col2, col3 là các chỉ số cột.
4. itertuples()
Hàm itertuples () trả về một một bộ giá trị được đặt tên cho mỗi hàng trong DataFrame. Phần tử đầu tiên là giá trị index tương ứng của hàng, trong khi các giá trị còn lại là giá trị hàng.
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
Kết quả :
Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=-
0.6346908238310438)
Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=-
0.50789517967096232)
Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=-
0.6633852507207626)
Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969,
col3=0.80344487462316527)
Lưu ý – Không nên sửa đổi bất kỳ đối tượng nào trong khi duyệt. Duyệt có nghĩa là để đọc và trình lặp trả về một bản sao của đối tượng ban đầu , do đó các thay đổi sẽ không phản ánh trên đối tượng ban đầu.
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
Kết quả :
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