๐Ÿ“’ Today I Learn/๐Ÿ Python

ํŒ๋‹ค์Šค(Pandas) ์„ธ์…˜ #2 ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ธฐ, ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ

ny:D 2024. 5. 15. 18:05

240514 Today I Learn

Data Selection

Getitem [ ]

๐Ÿ’ก dataframe['์ปฌ๋Ÿผ๋ช…']
DataFrame์—์„œ๋Š” column์„ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋Š” series ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

  • ์˜ˆ์‹œ

  • ์Šฌ๋ผ์ด์‹ฑ์„ ์ด์šฉํ•ด ์ถ”์ถœ ๊ฐ€๋Šฅ

# ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋‘ ์ฝ”๋“œ
df[0:3]
df["20240513":"20240515"]
    • ์ˆซ์ž๋กœ ์Šฌ๋ผ์ด์‹ฑ ํ•˜๋Š” ๊ฒฝ์šฐ [์‹œ์ž‘ํ•  ์ˆซ์ž : ๋๋‚  ์ˆซ์ž +1]
    • ๋ฌธ์ž๋กœ ์Šฌ๋ผ์ด์‹ฑ ํ•˜๋Š” ๊ฒฝ์šฐ [์‹œ์ž‘ํ•  ๋ฌธ์ž : ๋๋‚  ๋ฌธ์ž]

Selection by label

๐Ÿ’ก loc : ๋ผ๋ฒจ๋ช…์œผ๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
  • ํŠน์ • row๋ฅผ ๋งค์นญํ•ด ์ถ”์ถœํ•˜๋Š” ๊ฒฝ์šฐ
# dates[0] = '2024-05-13'
# row ๊ฐ’์ด 2024-05-13์ธ ํ–‰ ์ถ”์ถœ
df.loc[dates[0]]

## A    0.491729
## B   -0.344907
## C   -0.360853
## D    1.094950
## Name: 2024-05-13 00:00:00, dtype: float64
  • ์„ ํƒํ•œ ์นผ๋Ÿผ์—์„œ ๋ชจ๋“  row๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒฝ์šฐ

# ๋ชจ๋“  ํ–‰์˜ 'A', 'B' ์นผ๋Ÿผ์„ ์ถ”์ถœ
df.loc[:, ["A", "B"]]
  • ์Šฌ๋ผ์ด์‹ฑ

df.loc["20240513":"20240515", ["A", "B"]]

→ 20240513, 20240515 ์ž๋ฆฌ์— dates[0], dates[2]๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ. ๋‹จ (0, 2) ์™€ ๊ฐ™์€ ์ •์ˆ˜ํ˜• ์ธ๋ฑ์Šค๋Š” X

  • ํ•œ๊ฐœ์˜ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ฒฝ์šฐ → ์›ฌ๋งŒํ•˜๋ฉด at ์‚ฌ์šฉํ•˜๊ธฐ
df.loc['2024-05-13', 'A']

## df.loc['2024-05-13', 'A']
๐Ÿ’ก at: ๋ผ๋ฒจ๋ช…์œผ๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ•œ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์šฉ์ด
df.at['2024-05-13', 'A']

## df.at['2024-05-13', 'A']

Selection by position

๐Ÿ’ก iloc : ์ •์ˆ˜๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
  • ์ •์ˆ˜๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
df.iloc[3]

## A   -0.173435
## B   -0.813897
## C    0.248284
## D   -1.714577
## Name: 2024-05-16 00:00:00, dtype: float64
  • ์Šฌ๋ผ์ด์‹ฑ

df.iloc[3:5, 0:2]

→ 3-4๋ฒˆ์งธ ํ–‰, 0-1๋ฒˆ์งธ ์ปฌ๋Ÿผ ์Šฌ๋ผ์ด์‹ฑ ํ•ด ์ถ”์ถœํ•˜๊ธฐ

df.iloc[3:5]

→ 3-4๋ฒˆ์งธํ–‰ ์ถ”์ถœํ•˜๊ธฐ(์ด์™€ ๊ฐ™์ด ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์„ ๋•Œ์—๋Š” ๋ณ„๋„๋กœ ์ง€์ •ํ•ด๋‘์ง€ ์•Š์•„๋„ ๋จ)

df.iloc[:,0:2]

→ ๋ฐ˜๋ฉด ๋ชจ๋“  ํ–‰์˜ ์ฒซ๋ฒˆ์งธ ๋‘๋ฒˆ์งธ ์ปฌ๋Ÿผ๋งŒ ์Šฌ๋ผ์ด์‹ฑ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Œ.
→ ๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ์ฝœ๋ก (:)๊ณผ ์ฝค๋งˆ(,)๋ฅผ ๋„ฃ์–ด์ฃผ์–ด์•ผ '์ปฌ๋Ÿผ'์„ ์Šฌ๋ผ์ด์‹ฑ ํ•  ์ˆ˜ ์žˆ์Œ.

  • ๋ฆฌ์ŠคํŠธ๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด ๋ฐ์ดํ„ฐ ์ถ”์ถœ

df.iloc[[1, 2, 4], [0, 2]]

 

  • ํ•œ๊ฐœ์˜ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ฒฝ์šฐ→ ์›ฌ๋งŒํ•˜๋ฉด iat ์‚ฌ์šฉํ•˜๊ธฐ
df.iloc[1,1]

## 0.39981191278183553
๐Ÿ’ก iat: ์ •์ˆ˜๋กœ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ•œ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์šฉ์ด
df.iat[1, 1]

## 0.39981191278183553

Boolean Indexing

  • ๋ถˆ๋ฆฌ์–ธ ์ธ๋ฑ์‹ฑ : ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ์Šฌ๋ผ์ด์‹ฑ ํ•˜๋Š” ๊ฒƒ

 

 

์•Œ๋ฉด ์œ ์šฉํ•œ ํŒŒ์ด์ฌ ๋ฌธ๋ฒ• (4) ๋ถˆ๋ฆฌ์–ธ ์ธ๋ฑ์‹ฑ, ๋ฐ์ฝ”๋ ˆ์ด์…˜

๋ถˆ๋ฆฌ์–ธ ์ธ๋ฑ์‹ฑ๐Ÿ’ก ๋ถˆ๋ฆฌ์–ธ((Boolean) ์ž๋ฃŒํ˜• : ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ด ์ฐธ(True) ๋˜๋Š” ๊ฑฐ์ง“(False)์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ1. ๋ถˆ๋ฆฌ์–ธ ๋ฐฐ์—ด์„ ํ™œ์šฉํ•œ ์ธ๋ฑ์‹ฑarr = np.array([1, 2, 3, 4, 5])condition = np.array([True, False, True, F

archivenyc.tistory.com

  • ์˜ˆ์‹œ 1) ๋ฐ์ดํ„ฐ ์Šฌ๋ผ์ด์‹ฑํ•˜๊ธฐ (์›ํ•˜๋Š” ๊ฐ’๋งŒ ์ถ”์ถœ)

# A ๊ฐ’๋“ค์ด 0๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋“ค์„ ์„ ํƒ
df[df["A"] > 0.1]

 

  • ์˜ˆ์‹œ 2) ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ‘œ์‹œ

# ์กฐ๊ฑด : df์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ 0๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
df[df>0]
๐Ÿ’ก ์œ ์šฉํ•œ ํ•„ํ„ฐ๋ง ํ•จ์ˆ˜ isin()
๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„/ ์‹œ๋ฆฌ์ฆˆ์—์„œ ํŠน์ • ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๋ถˆ๋ฆฌ์–ธ ํ˜•ํƒœ๋กœ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜

# df2์˜ ์ปฌ๋Ÿผ 'E'์— 'two', 'four'๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ํ–‰์„ ์ถ”์ถœํ•˜๋ผ
df2[df2['E'].isin(['two','four'])]

 

Missing value Handling

๐Ÿ’ก ๊ฒฐ์ธก๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•
1. ๊ฒฐ์ธก์น˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ
- ์žฅ์  : ๊ฐ„๋‹จํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์™œ๊ณก์ด ์—†์Œ
- ๋‹จ์  : ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ฌ (๋จธ์‹ ๋Ÿฌ๋‹, ๋”ฅ๋Ÿฌ๋‹์‹œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Œ)
2. ๋Œ€์ฒด๊ฐ’์„ ์ฑ„์›Œ ๋„ฃ๋Š” ๊ฒƒ(๋ณด๊ฐ„๋ฒ•)
- ์žฅ์  : ๋ฐ์ดํ„ฐ ์ˆ˜๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ
- ๋‹จ์  : ๋ฐ์ดํ„ฐ๊ฐ€ ์™œ๊ณก๋  ์ˆ˜ ์žˆ์Œ → ์˜ฌ๋ฐ”๋ฅธ ๋Œ€์ฒด๊ฐ’(ํ‰๊ท , ์ค‘์•™๊ฐ’, 0)์„ ๋„ฃ์–ด์ค˜์•ผํ•จ

0. ๊ฒฐ์ธก ๊ฐ’ ๊ณ„์‚ฐํ•˜๊ธฐ

  • df.isna()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ถˆ๋ฆฌ์–ธ ํ˜•ํƒœ๋กœ nan์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ์ • ๊ฐ€๋Šฅ

์ง‘๊ณ„ํ•จ์ˆ˜ sum์„ ์ด์šฉํ•˜๋ฉด ์ด ๊ฒฐ์ธก๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Œ

  • ์ปฌ๋Ÿผ๋ณ„ ๊ฒฐ์ธก๊ฐ’์˜ ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ 
df1.isna().sum()

## A    0
## B    0
## C    0
## D    4
## E    1
## dtype: int64
  • ํ–‰๋ณ„ ๊ฒฐ์ธก๊ฐ’์˜ ์ˆ˜ ๊ณ„์‚ฐํ•˜๊ธฐ
df1.isna().sum(axis = 1)

## 2024-05-13    1
## 2024-05-14    1
## 2024-05-15    1
## 2024-05-16    2
## Freq: D, dtype: int64

1. ๋ˆ„๋ฝ๋œ ํ–‰์„ ์‚ญ์ œํ•˜๊ธฐ 

๐Ÿ’ก df.dropna(how = 'any'/ 'all', axis = 0)
  • how 
    • all : ๋ชจ๋“  ์ปฌ๋Ÿผ๊ณผ row๊ฐ€ nan์ด์–ด์•ผ ์‚ญ์ œ
    • any : ์ปฌ๋Ÿผ ๋˜๋Š” row๊ฐ€ nan์ธ ๊ฒฝ์šฐ ์‚ญ์ œ
  • axis
    • 0 : ํ–‰
    • 1 : ์—ด

 

df1

  • df.dropna(how='all')

df1.dropna(how="all")

→ ์นผ๋Ÿผ๊ณผ ํ–‰ ๋ชจ๋‘ nan ๊ฐ’์ธ ๋งˆ์ง€๋ง‰ ํ–‰(2024-05-16)์„ ์‚ญ์ œ

  • df.dropna(how='any')

df1.dropna(how="any", axis = 1)

→ ์นผ๋Ÿผ ๋˜๋Š” ํ–‰์ด ๊ฒฐ์ธก๊ฐ’์ธ ์ปฌ๋Ÿผ D, E๋ฅผ ์‚ญ์ œํ•จ

2. ๊ฒฐ์ธก๊ฐ’์„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ

๐Ÿ’ก df.fillna(value = '์ฑ„์šธ ๊ฐ’')
๊ฒฐ์ธก๊ฐ’์„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ

df1.fillna(value=0)

→ D์™€ E์— ์žˆ๋˜ NaN๊ฐ’์„ ๋ชจ๋‘ 1๋กœ ๋Œ€์ฒด