English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas 반복

Pandas 객체에 대한 기본 이터에이션의 행동은 타입에 따라 다릅니다. 시리즈에 대해 이터에이션할 때, 그것은 배열과 동일합니다. 다른 데이터 구조(예: DataFrame와 패널)는 dict와 유사한 문법을 따릅니다. 즉, 객체의 키를 이터에이션합니다.

결론적으로, 기본 이터에이션 (for i object) 이터에이션 시 −

시리즈 − 값 DataFrame − 열 태그 패널 − 아이템 태그

DataFrame 순회

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() − (인덱스, 시리즈) 튜플 형태로 행을 순회합니다 itertuples() − 행을 namedtuples 형태로 순회합니다

iteritems():

각 열을 키로 순회하며, 레이블이 있는 값 튜플을 키로, 열 값을 시리즈 객체로 설정합니다.

  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

실행 결과:

col1 0       0.802390
1    0.324060
2    0.256811
3    0.839186
이름: col1, dtype: float64
col2 0    1.624313
1   -1.033582
2    1.796663
3    1.856277
이름: col2, dtype: float64
col3 0   -0.022142
1   -0.230820
2    1.160691
3   -0.830279
이름: col3, dtype: float64

각 열이 시리즈 내에서 키밸류로 각각 이터레이션될 수 있음을 알 수 있습니다.

iterrows()

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
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

iterrows()는 행을 순회하므로 데이터 타입을 유지하지 않습니다. 0,1,2은 행 인덱스이며,col1,col2,col3은 열 인덱스입니다.

itertuples()

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(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)
주의:반복 중에 어떤 객체도 수정하지 마세요. 반복은 읽기에 사용되며, 이터레이터는 원본 객체(뷰)의 복사본을 반환하므로 변경은 원본 객체에 반영되지 않습니다.
 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

観察してみても、何も変わっていません。