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.