df.iterrows()
๊ธฐ๋ฅ์ ์๋ํ์ง๋ง ์ฑ๋ฅ์ด ๋์ฐํฉ๋๋ค. iterrows()
๊ฐ ๊ฐ (ํ์ํ ๋ชจ๋ ๊ฒ)์ด ์๋๋ผ ์ ์ฒด ์คํค๋ง ๋ฐ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ํฌํจ ๋ Series
๋ฅผ ๋ฐํํ๋ค๋ ์ ์ ๊ฐ์ํ๋ฉด ๋๋ผ์ด ์ผ์ด ์๋๋๋ค.
๋ด๊ฐ ์๋ํ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ for row in df.values
์ด๋ฉฐ ํจ์ฌ ๋ ๋น ๋ฆ
๋๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ์ df.values
์ด DataFrame์ ๋ด๋ถ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค. df.values
๋ ๋ชจ๋ dtypes
์ ๊ณตํต dtype
์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด ์ด ์ค ํ๋์ dtype int64
์์ง๋ง df.values
์ dtype์ ๋ชจ๋ float64
์
๋๋ค. ๊ทธ๋์ df.values
์ค์ ๋ก ๋ด๋ถ ๋ฐ์ดํฐ์ ๋ ๋ค๋ฅธ ์ฌ๋ณธ์ ์์ฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ ๋ค๋ฅธ ์๊ตฌ ์ฌํญ์ ํ ๋ฐ๋ณต์ด ๋ฐ์ดํฐ์ ์๋ dtype
๋ฅผ ๋ณด์กดํ๋ ๊ฐ ๋ชฉ๋ก์ ๋ฐํํด์ผํ๋ค๋ ๊ฒ์
๋๋ค.
ํ์ด์ฌ์์ ํ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋ฒกํฐํ ์์ ์ ์ํํ๋ ๊ฒ๋ณด๋ค (ํจ์ฌ) ๋๋ฆด ๊ฒ์ ๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์์ ์ ํ์ด ๋ณํ๋๋ ์ด์ ๋ numpy ๋ฐฐ์ด ( df.values
์ด ๋ฌด์์ธ์ง)์ด ์๋ํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์
๋๋ค. DataFrame์ ์ด ๊ธฐ๋ฐ์ด๋ฏ๋ก ์ฌ๋ฌ dtype์ด์๋ ๋จ์ผ DataFrame์ ๊ฐ์ง ์ ์์ต๋๋ค. ํ ๋ฐฉ์์ผ๋ก ๋ฐ๋ณตํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ชจ๋ ๊ฒ์ ๋ณด์ ํ๋๋ณด๋ค ์ผ๋ฐ์ ์ธ ์ ํ์ผ๋ก ์
์บ์คํธ๋์ด์ผํฉ๋๋ค. ๊ทํ์ ๊ฒฝ์ฐ int๋ float64
ํฉ๋๋ค.
์ต์ํ์ ์์ ์์ ๋ก ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ฉด ๋ฒกํฐํํ๋ ๋ฐ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. pandas ํ๊ทธ๋ก StackOverflow์์ ์ด์ด ์ข์ ์๋ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์ ์ํํ๊ณ ์ถ์ต๋๋ค.
row_handler = RowHandler(sample_df) # learn how to handle row from sample data
transformed_data = []
for row in df.values:
transformed_data.append(row_handler.handle(row))
return transformed_data
๋๋ RowHandler
ํด๋์ค๋ฅผ ์์ ํ๊ณ ์์ง ์์ผ๋ฏ๋ก ํ ๋จ์๋ก๋ง ์์
ํ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์ ์ฌํ ์๋ ํ ์์ค์์๋ง ์์ธก API๊ฐ์๋ ๋ชจ๋ธ์ด์๋ ๊ธฐ๊ณ ํ์ต์ ์์ต๋๋ค.
๋์์ด ๋๊ธฐ์๋ ์ฌ์ ํ ๋๋ฌด ๋ชจํธํฉ๋๋ค. ๊ทธ๋ฌ๋ RowHandler
์ด ์ ๋ง๋ก ๋น์ ์ ํต์ ๋ฅผ ๋ฒ์ด๋๋ค๋ฉด ๋น์ ์ ์ด์ด ์์ ๊ฒ์
๋๋ค. FWIW ๋ชจ๋ scikit-learn์ API๋ ๋ฐฐ์ด (์ฌ๋ฌ ํ)์์ ์๋ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ ๋ช
ํํด์ง ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์, RowHandler
์ (๋) ์ ์ด ํ ์ ์์ต๋๋ค. ์ด์ด ์๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ๋ด ์ง๋ฌธ์ ๊ฐ ์์์ dtype
๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ํ์ ๋ฐ๋ณตํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค. df.iterrows()
๋๋ ๋ค๋ฅธ ๊ฒ์ ์ ์ํ๊ณ ์์ต๋๊น?
sklearn
๋ PD์ DataFrame
์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ๋ ์์ธ์ด๋ฉฐ ํ์ค์ด ์๋๋๋ค. DataFrame
์์ ์๋ํ๋ API๊ฐ์๋ ๊ธฐ๊ณ ํ์ต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ง ์์ต๋๋ค.
๋๋ df.itertuples()
์ด ๋น์ ์ด ์ฐพ๊ณ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค-๊ทธ๊ฒ์ ๋ฐ๋ณต๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
๋๋ค :
In [10]: x = pd.DataFrame({'x': range(10000)})
In [11]: %timeit list(x.iterrows())
1 loops, best of 3: 383 ms per loop
In [12]: %timeit list(x.itertuples())
1000 loops, best of 3: 1.39 ms per loop
๊ฐ์ฌํฉ๋๋ค @shoyer! ๊ทธ๊ฒ ๋ด๊ฐ ํ์ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋
df.itertuples()
์ด ๋น์ ์ด ์ฐพ๊ณ ์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค-๊ทธ๊ฒ์ ๋ฐ๋ณต๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค :