๊ฐœ๋ฐœ Code/ํŒŒ์ด์ฌ Python

[Python][pandas] DataFrame ํ–‰๋ณ„ ์ˆœํšŒ(iterate) ๋ฐฉ๋ฒ• ์ •๋ฆฌ

5hr1rnp 2025. 2. 24. 11:13
๋ฐ˜์‘ํ˜•

pandas dataframe iterate

 

Pandas์˜ DataFrame์—์„œ ํ–‰์„ ์ˆœํšŒ(iterate)ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Pandas๋Š” ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์ด ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋Šฅํ•˜๋ฉด apply() ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์–ธ์ œ ํ–‰์„ ์ˆœํšŒํ•ด์•ผ ํ• ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ผ๊นŒ? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.


1. iterrows() ์‚ฌ์šฉํ•˜๊ธฐ


iterrows()๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ง€๋งŒ, ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ฐ ํ–‰์„ index, Series ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

import pandas as pd

# ์˜ˆ์ œ ๋ฐ์ดํ„ฐ
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)

# iterrows ์‚ฌ์šฉ
for index, row in df.iterrows():
    print(f"Index: {index}, A: {row['A']}, B: {row['B']}")
    
# Index: 0, A: 1, B: 4
# Index: 1, A: 2, B: 5
# Index: 2, A: 3, B: 6
์ฃผ์˜: iterrows()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์œ ์ง€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜ํ˜•(int) ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ€๋™์†Œ์ˆ˜(float)๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Œ.

2. itertuples() ์‚ฌ์šฉํ•˜๊ธฐ


itertuples()๋Š” iterrows()๋ณด๋‹ค ๋น ๋ฅด๋ฉฐ, ํ–‰์„ ํŠœํ”Œ ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. namedtuple์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

# itertuples ์‚ฌ์šฉ
for row in df.itertuples(index=True):
    print(f"Index: {row.Index}, A: {row.A}, B: {row.B}")
    
# Index: 0, A: 1, B: 4
# Index: 1, A: 2, B: 5
# Index: 2, A: 3, B: 6
์žฅ์ : iterrows()๋ณด๋‹ค ๋น ๋ฅด๊ณ , ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์œ ์ง€๋จ.

728x90
๋ฐ˜์‘ํ˜•

3. apply() ์‚ฌ์šฉํ•˜๊ธฐ


Pandas์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋Š” apply()๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ์ข‹๋‹ค.

def process_row(row):
    return row['A'] + row['B']

df['sum'] = df.apply(process_row, axis=1)
print(df)

#    A  B  sum
# 0  1  4    5
# 1  2  5    7
# 2  3  6    9
์žฅ์ : ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ , ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•จ.

4. zip()์„ ํ™œ์šฉํ•œ ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ


zip()์„ ํ™œ์šฉํ•˜๋ฉด iterrows()๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

for a, b in zip(df['A'], df['B']):
    print(f"A: {a}, B: {b}")
    
# A: 1, B: 4
# A: 2, B: 5
# A: 3, B: 6
์žฅ์ : iterrows()๋ณด๋‹ค ๋น ๋ฅด๊ณ , ํŠน์ • ์—ด๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํšจ๊ณผ์ .

5. NumPy ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ ํ™œ์šฉ


๊ฐ€๋Šฅํ•˜๋ฉด NumPy ๋ฒกํ„ฐ ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.

import numpy as np

df['sum'] = np.add(df['A'], df['B'])
print(df)

#    A  B  sum
# 0  1  4    5
# 1  2  5    7
# 2  3  6    9
์žฅ์ : ๋ฒกํ„ฐ ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฆ„.

์ •๋ฆฌ


 

๋ฐฉ๋ฒ• ์†๋„ ์žฅ์  ๋‹จ์ 
iterrows() ๋Š๋ฆผ ์ฝ”๋“œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์œ ์ง€ ์•ˆ ๋จ
itertuples() ์ค‘๊ฐ„ iterrows()๋ณด๋‹ค ๋น ๋ฅด๊ณ  ํƒ€์ž… ์œ ์ง€ ์†์„ฑ ์ ‘๊ทผ ๋ฐฉ์‹ ํ•„์š”
apply() ๋น ๋ฆ„ ๋ฒกํ„ฐ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•จ ํ•จ์ˆ˜ ์ž‘์„ฑ ํ•„์š”
zip() ๋น ๋ฆ„ ํŠน์ • ์—ด๋งŒ ํ•„์š”ํ•  ๋•Œ ์œ ์šฉ ์ „์ฒด DataFrame ์ˆœํšŒ ๋ถˆ๊ฐ€๋Šฅ
NumPy ์—ฐ์‚ฐ ๊ฐ€์žฅ ๋น ๋ฆ„ ์ตœ์ ํ™”๋œ ๋ฒกํ„ฐ ์—ฐ์‚ฐ ํ™œ์šฉ Pandas ๋ฌธ๋ฒ•๊ณผ ๋‹ค์†Œ ๋‹ค๋ฆ„

 

๊ฐ€๋Šฅํ•˜๋ฉด apply()๋‚˜ ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” iterrows()๋‚˜ itertuples()๋„ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์ž.

 

๋ฐ˜์‘ํ˜•