๐ก Index
์ผ๋จ ๊ฐ์ฅ ๊ธฐ๋ณธ์ธ pandas๋ฅผ import ํด์ค๋ค.
import pandas as pd
1. ๋ฐ์ดํฐ ํ๋ ์ ๋ถ๋ฌ์ค๊ธฐ
1) Encoding ์ง์ ํด์ฃผ๊ธฐ
ํ๊ธ ํ์ผ ํฐํธ๊ฐ ๊นจ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ธ์ฝ๋ฉ์ ์ค์ ํด์ค๋ค.
์๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ Mac ์ด์์ฒด์ ์์ ํ๊ธ์ด ๊นจ์ง์์ด ์ ์ ์ฉ๋์๋ค.
encoding = 'utf-8'
df = pd.read_csv('./data/train.csv', encoding = 'utf-8')
2) ์ซ์ ๊ตฌ๋ถ ๊ธฐํธ ์์ด ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
์ซ์์ ์ฝค๋ง(,)๋ก ์ฒ ๋จ์ ๊ตฌ๋ถ์ด ๋์ด์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ถ๋ฌ์์ ๋ Objectํ์ผ๋ก ์ธ์ํ๊ฒ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฝค๋ง ๋๋ฌธ์ ํ ๋ฒ์ ์ซ์ํ์ผ๋ก ๋ณํ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๋ฐ์ ์ฝค๋ง๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ถ๋ฌ์ค๋๋ก ํ๋ค.
**thousands = ","
df = pd.read_csv('./data/train.csv',thousands="," )
3) ์ปฌ๋ผ๋ช ์ ๋ณ๊ฒฝํ์ฌ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
names์ ์ปฌ๋ผ๋ช
์ ์์๋๋ก ์์ฑํ์ฌ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค.
names = ['col1', 'col2']
df = pd.read_csv('./data/train.csv', names= ['ํ๋ชฉ', 'ํฌ๊ธฐ', '๊ธ์ก', '์์๋ฃ'])
4) ์ฒซ ๋ฒ์งธ ์ด์ ์ธ๋ฑ์ค๋ก ๊ฐ์ ธ์ค๊ธฐ
index_col = 1
df = pd.read_csv('./data/train.csv', index_col = 1)
5) ํน์ ์ํ๋ ์ปฌ๋ผ๋ง ๋ฐ์ดํฐ์์ ๊ฐ์ ธ์ค๊ธฐ
usecols = ['col1', 'col2']
df = pd.read_csv('./data/train.csv', usecols=['ํ๋ชฉ', 'ํฌ๊ธฐ'])
6) ๋ฐ์ดํฐ ํ๋ ์ csv ํ์ผ๋ก ์ ์ฅํ๊ธฐ
์ธ์ฝ๋ฉ์ ์ฃผ์ํ๋๋ก ํ๋ค.
df.to_csv('.csv', encoding = 'utf-8-sig')
2. ๋ฐ์ดํฐํ๋ ์ ์์ฑ
1) list์ array๋ฅผ ์ด์ฉํ ์์ฑ
import numpy as np
col_name1 = ['col1']
list1 = [1,2,3]
array1 = np.array(list1)
print('array1 shape: ', array1.shape)
# ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด DataFrame ์์ฑ
df_list1 = pd.DataFrame(list1, columns=col_name1)
print('1์ฐจ์ ๋ฆฌ์คํธ๋ก ๋ง๋ DataFrame: \n', df_list1)
# ๋ํ์ด ndarray๋ฅผ ์ด์ฉํด DataFrame ์์ฑ
df_array1 = pd.DataFrame(array1, columns=col_name1)
print('1์ฐจ์ array๋ก ๋ง๋ DataFrame: \n', df_array1)
์ ์ฝ๋์ ์ถ๋ ฅ๋ฌผ์ ๋ค์๊ณผ ๊ฐ๋ค.
2) Dictionary๋ฅผ ์ด์ฉํ ์์ฑ
dict = {'col1': [1,11], 'col2':[2,22], 'col3': [3,33]} # key๋ ๋ฌธ์์ด ์นผ๋ผ๋ช
์ผ๋ก ๋งคํ, Value๋ ๋ฆฌ์คํธํ ์นผ๋ผ ๋ฐ์ดํฐ๋ก ๋งคํ
df_dict = pd.DataFrame(dict)
print('๋์
๋๋ฆฌ๋ก ๋ง๋ DataFrame: \n', df_dict)
3) List๋ฅผ ์ด์ฉํ ์์ฑ
a = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
df3 = pd.DataFrame(a)
4) Nan ๊ฒฐ์ธก๊ฐ ๋ฃ์ด์ ์์ฑ
import numpy as np
a = {'company' : ['abc', 'ํ์ฌ', 123], '์ง์์' : [400, 10, 6], '์์น' : ['Seoul', np.NaN, 'Busan']}
df4 = pd.DataFrame(a)
์ ์ฝ๋์ ๋ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ค์๊ณผ ๊ฐ๋ค.
3. ๋ฐ์ดํฐ ํ๋ ์ ๋ณต์ฌํ๊ธฐ
1) Shallow Copy
๋จ์ํ ๋ฐ์ดํฐ ํ๋ ์์ ๊ฐ์ ๋ณต์ ํ๋ ๋ฐฉ์์ผ๋ก, ํ๋์ ๋ฐ์ดํฐ ํ๋ ์์ ์์ ํ ๊ฒฝ์ฐ ๋ณต์ ํ ๋ฐ์ดํฐ ํ๋ ์ ์ญ์ ๋์ผํ๊ฒ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})
df2 = df # df dataframe์ ๋ณต์
์์ ๊ฐ์ ๋ฐฉ์์์ ๋์ผํ๊ฒ ๋ณ๊ฒฝ์ด ์ ์ฉ๋๋ ์ด์ ๋ ์ผ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋์ ๊ฐ์ฒด๋ฅผ ๋ณ์ ์ด๋ฆ ๋๊ฐ๋ก ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ deep copy ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
2) Deep Copy
df = pd.DataFrame({'a': [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]})
# ๋ฐฉ๋ฒ 1
import copy
df2 = copy.deepcopy(df)
# ๋ฐฉ๋ฒ 2
df2 = df.__deepcopy__()
4. Column, Row ์ ์ถ๊ฐ์ ์์
1) Column ; ์ปฌ๋ผ ์ถ๊ฐํ๊ธฐ
(1) ๋์ผํ ๊ฐ์ ๋ฃ์ด ์ปฌ๋ผ ์์ฑํ๊ธฐ
๊ฐ๋จํ๊ฒ ์ปฌ๋ผ๋ช ์ ์ง์ ํ๊ณ ๊ทธ ์์ ๋์ผํ ๊ฐ์ผ๋ก ์ฑ์๋ฃ์ ์ ์๋ค .
df['col_1'] = 0 #๋ชจ๋ ๋ฐ์ดํฐ ๊ฐ์ด 0์ผ๋ก ํ ๋น๋ ์๋ฆฌ์ฆ๊ฐ ๊ธฐ์กด ๋ฐ์ดํฐ ํ๋ ์์ ์ถ๊ฐ
(2) ๊ธฐ์กด ๋ฐ์ดํฐ ํ๋ ์์ ์ปฌ๋ผ์ ํ์ฉํ์ฌ ์์ฑํ๊ธฐ
๊ธฐ์กด ์ปฌ๋ผ์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ๋ณํํ์ฌ ์์ฑํ ์ ์๋ค.
titanic_df['Age_by_10'] = titanic_df['Age'] * 10
titanic_df['Family_no'] = titanic_df['SibSp'] + titanic_df['Parch'] + 1
(3) ํน์ ์์น์ ์ปฌ๋ผ ์์ฑํ๊ธฐ
insert(์ฝ์ ํ ์์น, ์ปฌ๋ผ ์ด๋ฆ, ์ปฌ๋ผ ์์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ)
df.insert(2, 'col_name', 'No.')
2) Row ์ถ๊ฐํ๊ธฐ
inplace = True๋ฅผ ์ง์ ํด์ผ ๊ธฐ์กด ๋ฐ์ดํฐํ๋ ์์ ์ ์ฅ๋จ์ ์ฃผ์ํ๋ค.
# ๋ฐฉ๋ฒ 1
df.append({'a' : 7, 'b' : 8, 'c' : 9}, ignore_index = True)
# ๋ฐฉ๋ฒ 2
df.loc[6] = [7, 8, 9]
์ ์ฝ๋์ ๋ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
3) Column ; ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝํ๊ธฐ
(1) ์ปฌ๋ผ ์ ์ฒด์ ์ด๋ฆ ๋ณ๊ฒฝํ๊ธฐ
์ปฌ๋ผ์ ์์ ๋ง์ถ์ด ์ ์ฒด์ ์ด๋ฆ์ ์ง์ ํด์ฃผ์ดํ ํ๋ค.
df..columns = ['A','B','C','D','E','F',"G",'H',"I",'J','K','L']
(2) ํน์ ๋จ์ผ ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝํ๊ธฐ
rename(columns={'๊ธฐ์กด ์ปฌ๋ผ ์ด๋ฆ' : '๋ณ๊ฒฝํ ์ปฌ๋ผ ์ด๋ฆ})
df.rename(columns={'Name':'name'}, inplace=True)
5. ๋ฐ์ดํฐํ๋ ์์ ์ญ์
Drop( )
axis = 0 ์ row ๋ฐฉํฅ, axis = 1์ col ๋ฐฉํฅ์ ์๋ฏธํ๋ค.
inplace = True๋ฅผ ํด์ฃผ์ด์ผ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ค.
1) ์ปฌ๋ผ ์ญ์ ํ๊ธฐ
(1) column ์ด๋ฆ์ ํตํด ์ญ์ ํ๊ธฐ
df.drop('col_name', axis=1, inplace=True)
(2) index ๋ฒ์๋ฅผ ํตํด ์ญ์ ํ๊ธฐ
idx = [x for x in range(3,5)]
titanic_df.drop(titanic_df.columns[idx], axis=1)
2) Row ์ญ์ ํ๊ธฐ
(1) index ํตํด ์ญ์ ํ๊ธฐ
์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ํตํด ํ์ ์ญ์ ํ๋ค.
df.drop([0,1,2], axis=0)
(2) ์กฐ๊ฑด์ ๋ง๋ index ํตํด ์ญ์ ํ๊ธฐ
df.drop(df[(df['a'] < 3) & (df['c'] == 4)].index)
6. Index์ ์ค์
1) ์ธ๋ฑ์ค ๊ฐ์ฒด ์ถ์ถํ๊ธฐ
# ์ธ๋ฑ์ค ๊ฐ์ฒด ์ถ์ถ
indexes = titanic_df.index
print(indexes)
# Index ๊ฐ์ฒด๋ฅผ ์ค์ ๊ฐ array๋ก ๋ณํ
print('Index ๊ฐ์ฒด array๊ฐ: \n', indexes.values) # index ๋ฐ์ดํฐ๋ ์๋ณ์ฑ ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์ array๋ก ๊ฐ์ง๊ณ ์๋ค.
# ndarray์ ์ ์ฌํ๊ฒ ๋จ์ผ ๊ฐ ๋ฐํ ๋ฐ ์ฌ๋ผ์ด์ฑ ๊ฐ๋ฅ
print(indexes.shape)
print(indexes[:5].values)
print(indexes.values[:5])
2) reset index
์๋กญ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฐ์ ์ซ์ํ์ผ๋ก ํ ๋นํ๊ณ ๊ธฐ์กด ์ธ๋ฑ์ค๋ 'index'๋ผ๋ ์๋ก์ด ์นผ๋ผ ๋ช ์ผ๋ก ์ถ๊ฐ๋๋ค.
df.reset_index(inplace=False)
3) set index
๊ธฐ์กด ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ก ๋ณํํ๊ธฐ
df.set_index(['col1', 'col2'], inplace = False)