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 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
data = df.set_index('A')
- ํ์ฌ ์ธ๋ฑ์ค๋ฅผ 0๋ถํฐ ์์ํ๋ ์ ์๋ก ๋ณ๊ฒฝํ๊ธฐ
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