Post

[Python] ํŒ๋‹ค์Šค(Pandas) - DataFrame

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ €๋ฒˆ์—” 1์ฐจ์› Series๋ฅผ ๋ดค๋‹ค. ์ด๋ฒˆ์—” ํ•œ ์ฐจ์› ๋” ๋‚˜์•„๊ฐ„ DataFrame์„ ๋‹ค๋ฃฌ๋‹ค.

DataFrame์ด๋ž€? ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ 2์ฐจ์› ๋ฐ์ดํ„ฐ(์—‘์…€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ํšจ๊ณผ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ. ์—ฌ๋Ÿฌ ๊ฐœ์˜ Series๊ฐ€ ๋ชจ์ธ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Desktop View


1. DataFrame ์ƒ์„ฑ

๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ƒ์„ฑ (ํ‚ค๊ฐ€ ์—ด์ด ๋จ):

1
2
3
4
5
6
7
from pandas import DataFrame

๋”•์…”๋„ˆ๋ฆฌ = {"x": [10, 40], "y": [20, 30]}
df = DataFrame(๋”•์…”๋„ˆ๋ฆฌ)
#     x   y
# 0  10  20
# 1  40  30

2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ƒ์„ฑ:

1
2
3
4
5
๋ฆฌ์ŠคํŠธ = [[10, 20], [30, 40]]
df = DataFrame(๋ฆฌ์ŠคํŠธ)
#     0   1
# 0  10  20
# 1  30  40

์ธ๋ฑ์Šคยท์ปฌ๋Ÿผ ์ง€์ •:

1
2
df.index = ["x", "y"]      # ํ–‰ ๋ผ๋ฒจ(์™ผ์ชฝ ์„ธ๋กœ)
df.columns = ["a", "b"]    # ์—ด ๋ผ๋ฒจ(์œ„์ชฝ ๊ฐ€๋กœ)

Desktop View

๐Ÿ’ก DataFrame์˜ ๊ฐ ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜์˜ Series์ด๊ณ , ๋ฐ˜๋Œ€๋กœ row๋„ Series๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. Series๋ฅผ 2์ฐจ์›์œผ๋กœ ํ™•์žฅํ•œ ๊ฒƒ์ด DataFrame์ด๋‹ค.


2. ์กฐ๊ฑด(๋ถˆ๋ฆฌ์–ธ) ์ธ๋ฑ์‹ฑ

1
2
3
4
df[df["์‹œ๊ฐ€"] >= 90]["์ข…๊ฐ€"]         # ์‹œ๊ฐ€ 90 ์ด์ƒ์ธ ํ–‰์˜ ์ข…๊ฐ€

cond = df["์‹œ๊ฐ€"] >= 90               # True/False Series
df.loc[cond, ["์‹œ๊ฐ€", "์ข…๊ฐ€"]]        # ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์˜ ํŠน์ • ์—ด

๐Ÿ’ก df["์‹œ๊ฐ€"] >= 90์ด True/False Series๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ df.loc[]์— ๋„ฃ์œผ๋ฉด True์ธ ํ–‰๋งŒ ์ถ”์ถœ๋œ๋‹ค. ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ DataFrame์„ ์–ป๋Š”๋‹ค.


3. groupby โ€” ๊ทธ๋ฃน๋ณ„ ๋ถ„๋ฅ˜

1
2
3
4
5
6
7
8
df = DataFrame({
    'sex':    ['m', 'm', 'w', 'm', 'w'],
    'weight': [76, 88, 54, 70, 45],
    'height': [176, 190, 148, 177, 155]
})

df_ = df.groupby("sex")     # sex์˜ ๊ณ ์œ ๊ฐ’์œผ๋กœ ๊ทธ๋ฃนํ•‘
df_.get_group("m")          # 'm' ๊ทธ๋ฃน๋งŒ ์ถ”์ถœ

๐Ÿ’ก groupby()๋Š” ํ•œ ์ปฌ๋Ÿผ์˜ ๊ณ ์œ ๊ฐ’(unique)๋“ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ๋Š”๋‹ค. ๊ทธ๋ฃน๋ณ„๋กœ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ์ง‘๊ณ„(ํ‰๊ท ยทํ•ฉ๊ณ„ ๋“ฑ)์— ํ™œ์šฉํ•œ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
6
Pandas DataFrame
โ”œโ”€ ์ƒ์„ฑ    DataFrame(๋”•์…”๋„ˆ๋ฆฌ) ๋˜๋Š” 2์ฐจ์› ๋ฆฌ์ŠคํŠธ
โ”œโ”€ ๋ผ๋ฒจ    df.index(ํ–‰) / df.columns(์—ด)
โ”œโ”€ ๊ตฌ์กฐ    ์ปฌ๋Ÿผยทrow ๋ชจ๋‘ Series
โ”œโ”€ ์กฐ๊ฑด    cond = df["์—ด"] >= n โ†’ df.loc[cond, [...]]
โ””โ”€ ๊ทธ๋ฃน    groupby("์—ด").get_group(๊ฐ’)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
DataFrameํ–‰ยท์—ด 2์ฐจ์› ๋ฐ์ดํ„ฐ (์—‘์…€ํ˜•)
loc ์กฐ๊ฑด ์ธ๋ฑ์‹ฑ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰ ์ถ”์ถœ
groupby๊ณ ์œ ๊ฐ’์œผ๋กœ ๊ทธ๋ฃนํ•‘

DataFrame์€ โ€œSeries๋ฅผ ๋ชจ์€ 2์ฐจ์› ํ‘œโ€๋‹ค. ์กฐ๊ฑด ์ธ๋ฑ์‹ฑ๊ณผ groupby๋งŒ ์ตํžˆ๋ฉด, ์—‘์…€๋กœ ํ•˜๋˜ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐยท์ง‘๊ณ„๋ฅผ ์ฝ”๋“œ๋กœ ํ›จ์”ฌ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.