Python Pandas - Lặp lại
Hành vi của lặp lại cơ bản trên các đối tượng Pandas phụ thuộc vào loại. Khi lặp qua một Chuỗi, nó được coi là giống như mảng và phép lặp cơ bản tạo ra các giá trị. Các cấu trúc dữ liệu khác, như DataFrame và Panel, tuân theodict-like quy ước lặp qua keys của các đối tượng.
Tóm lại, sự lặp lại cơ bản (đối với i trong đối tượng) sản xuất -
Series - giá trị
DataFrame - nhãn cột
Panel - nhãn mặt hàng
Lặp lại một DataFrame
Lặp lại một DataFrame cung cấp các tên cột. Chúng ta hãy xem xét ví dụ sau để hiểu tương tự.
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
Nó là output như sau -
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 lại các cặp (khóa, giá trị)
iterrows() - lặp qua các hàng dưới dạng cặp (chỉ mục, chuỗi)
itertuples() - lặp qua các hàng dưới dạng các nhóm có tên
iteritems ()
Lặp lại 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
Nó là output như sau -
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
Quan sát, 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 Chuỗi.
iterrows ()
iterrows () trả về trình lặp mang lại từng giá trị chỉ mục cùng với một chuỗi 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
Nó là output như sau -
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
Note - Vì iterrows()lặp qua các hàng, 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.
itertuples ()
Phương thức itertuples () sẽ trả về một trình vòng lặp mang lại một bộ giá trị được đặt tên cho mỗi hàng trong DataFrame. Phần tử đầu tiên của bộ tuple sẽ là giá trị chỉ số 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
Nó là output như sau -
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)
Note- Không cố gắng sửa đổi bất kỳ đối tượng nào trong khi lặp lại. Lặp lại có nghĩa là để đọc và trình lặp trả về một bản sao của đối tượng ban đầu (một khung nhìn), 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
Nó là output như sau -
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
Quan sát, không có thay đổi nào được phản ánh.