Python 판다스 DataFrame for 문 반복 처리

pandas DataFrame에 저장된 데이터를 for 문으로 처리하는 경우 단순히 for 문으로 돌리면 열 이름이 출력되기만 합니다.

반복 처리를 하기 위해서는 메서드를 사용해 열 또는 행 단위로 값을 취득해야 합니다.

예제를 보면서 DataFrame에서 반복 처리를 하며 값을 취득하는 방법을 보겠습니다.

먼저 샘플 데이터를 준비하겠습니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

print(df)
#        age state  point
# Alice   24    NY     64
# Bob     42    CA     92

 

먼저 for 문으로 단순히 DataFrame을 반복처리 해보겠습니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for column_name in df:
    print(type(column_name))
    print(column_name)
    print('======\n')
# <class 'str'>
# age
# ======
# 
# <class 'str'>
# state
# ======
# 
# <class 'str'>
# point
# ======
# 

 

컬럼 이름이 순서대로 출력되었습니다.

DataFrame에 저장된 데이터는 전부 출력되지 않았습니다.

 

1열 취득 iteritems()

1열씩 값을 취득하는 방법을 보겠습니다.

iteritems()를 사용하면 하나의 열씩 컬럼명과 같이 값을 더블 형태로 취득합니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for column_name, item in df.iteritems():
    print(type(column_name))
    print(column_name)
    print('~~~~~~')

    print(type(item))
    print(item)
    print('------')

    print(item['Alice'])
    print(item[0])
    print(item.Alice)
    print('======\n')
# <class 'str'>
# age
# ~~~~~~
# <class 'pandas.core.series.Series'>
# Alice    24
# Bob      42
# Name: age, dtype: int64
# ------
# 24
# 24
# 24
# ======
# 
# <class 'str'>
# state
# ~~~~~~
# <class 'pandas.core.series.Series'>
# Alice    NY
# Bob      CA
# Name: state, dtype: object
# ------
# NY
# NY
# NY
# ======
# 
# <class 'str'>
# point
# ~~~~~~
# <class 'pandas.core.series.Series'>
# Alice    64
# Bob      92
# Name: point, dtype: int64
# ------
# 64
# 64
# 64
# ======
# 

 

 

1행 취득 

이번에는 반복 처리를 하면서 한 줄씩 데이터를 취득하는 방법을 보겠습니다.

한 줄씩 데이터를 취득하는 방법으로는 iterrows()와 itertuples() 메서드가 있습니다.

iterrows()를 사용해 취득하는 방법을 보겠습니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for index, row in df.iterrows():
    print(type(index))
    print(index)
    print('~~~~~~')

    print(type(row))
    print(row)
    print('------')

    print(row['point'])
    print(row[2])
    print(row.point)
    print('======\n')
# <class 'str'>
# Alice
# ~~~~~~
# <class 'pandas.core.series.Series'>
# age      24
# state    NY
# point    64
# Name: Alice, dtype: object
# ------
# 64
# 64
# 64
# ======
# 
# <class 'str'>
# Bob
# ~~~~~~
# <class 'pandas.core.series.Series'>
# age      42
# state    CA
# point    92
# Name: Bob, dtype: object
# ------
# 92
# 92
# 92
# ======
#

 

컬럼명 또는 인덱스를 지정해 해당하는 열의 값을 취득할 수 있습니다.

이번에는 itertuples() 사용 방법과 결과를 보겠습니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for row in df.itertuples():
    print(type(row))
    print(row)
    print('------')

    print(row[3])
    print(row.point)
    print('======\n')
# <class 'pandas.core.frame.Pandas'>
# Pandas(Index='Alice', age=24, state='NY', point=64)
# ------
# 64
# 64
# ======
# 
# <class 'pandas.core.frame.Pandas'>
# Pandas(Index='Bob', age=42, state='CA', point=92)
# ------
# 92
# 92
# ======
# 

 

인덱스 또는 컬럼명으로 각각의 값에 접근해 취득할 수 있습니다.

반복처리 중 특정 컬럼의 값만 출력하고 싶은 경우는 컬럼명을 지정해 출력하면 됩니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for age in df['age']:
    print(age)
# 24
# 42

 

for 문에 여러개 컬럼을 지정하고 싶은 경우에는 zip() 함수를 같이 사용합니다.

import pandas as pd

df = pd.DataFrame({'age': [24, 42], 'state': ['NY', 'CA'], 'point': [64, 92]},
                  index=['Alice', 'Bob'])

for age, point in zip(df['age'], df['point']):
    print(age, point)
# 24 64
# 42 92

 

for문과 zip() 함수에 대한 자세한 내용을 아래를 참조해 주세요.

 

DataFrame에 저장된 값을 for 문을 사용해 취득하는 방법을 알아봤습니다.  

댓글