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

[Pandas] ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ (1) : ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ, ์ธ๋ฑ์Šค, ์ปฌ๋Ÿผ

ny:D 2024. 5. 9. 14:55

240509 Today I Learn

๐Ÿ’ก  ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ตฌ์ถ•๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด์ค˜์•ผ ํ•จ. ์ด ๋ชจ๋“  ํ™œ๋™์„ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฌด์—‡์„ ํ™•์ธํ•  ๊ฒƒ์ธ์ง€?
  • ์–ด๋–ค ์˜์‚ฌ๊ฒฐ์ •์„ ์œ„ํ•ด ํ•„์š”ํ•œ์ง€?
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฌด์—‡์„ ์–ป๊ณ ์ž ํ•˜๋Š”์ง€?

์‹œ๋ฆฌ์ฆˆ vs. ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„

  • DataFrame = ํ‘œ ํ˜•ํƒœ
    • index : ๊ฐ ์•„์ดํ…œ์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ์˜ ๊ฐ’ (์—‘์…€์—์„œ๋Š” ์ขŒ์ธก ์—ด์ˆœ์„œ๋กœ ์ƒ๊ฐํ•˜๋ฉด๋จ)
    • columns : ํ•˜๋‚˜์˜ ์†์„ฑ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ
  • Series = ํ•˜๋‚˜์˜ ์†์„ฑ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ (= DataFrame ํ‘œ์—์„œ ์—ด 1์ค„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์›€)
    • value + index

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ / ์ €์žฅํ•˜๊ธฐ

๐Ÿ’ก ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ / ์ €์žฅํ•˜๊ธฐ
# ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
df = read_ํ™•์žฅ์ž๋ช…("๊ฒฝ๋กœ/ํŒŒ์ผ๋ช….ํ™•์žฅ์ž๋ช…",index_col = ์ธ๋ฑ์Šค์นผ๋Ÿผ) 

# ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ
to_ํ™•์žฅ์ž๋ช…("์ €์žฅํ• ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช….ํ™•์žฅ์ž๋ช…", index = True/False)โ€‹
  • ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
df = pd.read_csv("tips_data.csv")
print(df.head())

##    Unnamed: 0  total_bill   tip     sex smoker  day    time  size
## 0           0       16.99  1.01  Female     No  Sun  Dinner     2
## 1           1       10.34  1.66    Male     No  Sun  Dinner     3
## 2           2       21.01  3.50    Male     No  Sun  Dinner     3
## 3           3       23.68  3.31    Male     No  Sun  Dinner     2
## 4           4       24.59  3.61  Female     No  Sun  Dinner     4

→ ์—‘์…€ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ช…(.xlsx)

  • ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ
data.to_csv("tips_data.csv", index = True)
  • `index = True`์ธ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๊ฐ€ ์ถœ๋ ฅ๋จ

  • `index = False`์ธ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๊ฐ€ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ

์ธ๋ฑ์Šค

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})

→ ์ธ๋ฑ์Šค๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ์ •์ˆ˜์ด๋‹ค.

 

๐Ÿ’ก ์ธ๋ฑ์Šค๋ช… ์ง€์ •ํ•˜๊ธฐ

df2 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx3', 'idx1', 'idx2'])
  • ์ธ๋ฑ์Šค๋ช… ํ™•์ธํ•˜๊ธฐ
df2.index

## Index(['idx1', 'idx2', 'idx3'], dtype='object')
  • ์ธ๋ฑ์Šค๋ช… ๋ณ€๊ฒฝํ•˜๊ธฐ

df2.index = ['one', 'two', 'three']
df2
  • ์ธ๋ฑ์Šค๋ช… ์ •๋ ฌํ•˜๊ธฐ 

df.sort_index()
  • ํŠน์ • ์ปฌ๋Ÿผ์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•˜๊ธฐ

df → data

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
data = df.set_index('A')
  • ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ •์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

df → df2 → df3

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
df.index=['ใ„ฑ','ใ„ด','ใ„ท']

df2 = df.reset_index()
df3 = df.reset_index(drop=True)

์ปฌ๋Ÿผ

newjeans = {
    'name' : ['Minji','Danielle','Hanni','Haerin','Hyein'],
    'age' : [20, 19, 19, 17, 16],
    'nationality' : ['Korea', 'Australia', 'Australia','Korea','Korea']
}

newjeans = pd.DataFrame(newjeans)
  • ์›ํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์ถ”์ถœํ•˜๊ธฐ
# ๋‰ด์ง„์Šค ๋ฉค๋ฒ„๋“ค์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

newjeans['name']

## 0       Minji
## 1    Danielle
## 2       Hanni
## 3      Haerin
## 4       Hyein
## Name: name, dtype: object

→ ์ด๋•Œ ์ถ”์ถœ๋œ ์ปฌ๋Ÿผ์„ ์‹œ๋ฆฌ์ฆˆ(Series) ํƒ€์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์žˆ๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ๋ช… ์ถœ๋ ฅํ•˜๊ธฐ `.columns`
newjeans.columns

## Index(['name', 'age', 'nationality'], dtype='object')
  • ์ปฌ๋Ÿผ๋ช… ๋ฐ”๊พธ๊ธฐ

newjeans.columns = ['์ด๋ฆ„','๋‚˜์ด','๊ตญ์ ']
newjeans

 

๐Ÿ’ก์ผ๋ถ€ ์ปฌ๋Ÿผ๋ช…๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ rename ์‚ฌ์šฉํ•˜๊ธฐ

๋”๋ณด๊ธฐ

์ผ๋ถ€ ์ปฌ๋Ÿผ๋ช…๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

์ผ๋ถ€ ์ปฌ๋Ÿผ๋ช…๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ columns๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ columns ๋Œ€์‹  rename์„ ํ™œ์šฉํ•ด ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ์ปฌ๋Ÿผ๋ช…๊ณผ ๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ๋ช…์„ ์ผ๋Œ€์ผ๋กœ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

new_jeans = newjeans.rename(columns={'name':'์ด๋ฆ„', 'nationality' : '๊ตญ์ '})
new_jeans

๐Ÿ’ก rename์„ ํ™œ์šฉํ•  ๋•Œ์—๋Š” `new_jeans newjeans.rename(~)`๊ณผ ๊ฐ™์ด ๋ฐ˜๋“œ์‹œ ์ƒˆ๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (์™œ ๊ทธ๋Ÿฐ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Œ..ใ…Ž) ๋ฌผ๋ก  ์ด ์ „์— ์žˆ๋˜ dataframe์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ newjeans๋กœ ์ง€์ •ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

  • ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ธฐ

# ๋‰ด์ง„์Šค ๋ฉค๋ฒ„๋“ค์€ ๊ฐ๊ฐ Chanel, Celine, Gucci, Dior, LouisVuitton์˜ ์•ฐ๋ฒ„์„œ๋”์ด๋‹ค.
# ์•ฐ๋ฒ„์„œ๋”๋กœ ํ™œ๋™์ค‘์ธ ๋ธŒ๋žœ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ปฌ๋Ÿผ 'brands'๋ฅผ ๋งŒ๋“ค์–ด๋ผ.

newjeans['brands'] = ['Chanel','Celine','Gucci','Dior','LouisVuitton'] 
newjeans

 

๐Ÿ’ก ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ํ•œ ์ปฌ๋Ÿผ์„ ์ฑ„์šฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”๋ณด๊ธฐ
# ๋‰ด์ง„์Šค ๋ฉค๋ฒ„๋“ค์˜ ์ง์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” 'occupation'์ด๋ผ๋Š” ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค์–ด๋ผ.

newjeans['occupation'] = 'singer'
newjeans
  • ์ปฌ๋Ÿผ ์‚ญ์ œํ•˜๊ธฐ

# brands ์ปฌ๋Ÿผ์„ ์‚ญ์ œํ•˜์„ธ์š”.

del newjeans['brands']
newjeans