learning_python : 데이터분석 Pandas

Pandas 패키지를 이용한 데이터분석 기본적인 활용 코드 정리


분석 환경

  • AWS Sagemaker Notebook Instance 생성
  • Jupyter Notebook 실행

패키지 설치

import pandas as pd

DataFrame() 활용

#dict 자료 구조 데이터를 dataframe으로 변환
data = {
    '이름' : ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
    '학교' : ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
    '키' : [197, 184, 168, 187, 188, 202, 188, 190],
    '국어' : [90, 40, 80, 40, 15, 80, 55, 100],
    '영어' : [85, 35, 75, 60, 20, 100, 65, 85],
    '수학' : [100, 50, 70, 70, 10, 95, 45, 90],
    '과학' : [95, 55, 80, 75, 35, 85, 40, 95],
    '사회' : [85, 25, 75, 80, 10, 80, 35, 95],
    'SW특기' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}
df = pd.DataFrame(data)
pandas에서의 CSV 파일 읽기
# Path of the file to read
dc_path = "./input/dc-wikia-data.csv"

# Read the file into a variable flight_data
dc_data = pd.read_csv(dc_path)

dc_data.head(10)

DataFrame() 데이터 정제

df['이름']
df[['이름','키']]
df = pd.DataFrame(data, columns=['이름', '키', '학교'] )

df.set_index('이름', inplace=True) # index를 지정 컬럼으로 설정, 실제 데이터에 바로 반영
df.reset_index(drop=True, inplace=True) # index 초기화, 실제 데이터에 바로 반영
df.sort_index(ascending=False) # index 기준 내림차순으로 정렬

데이터 확인

df.describe()
df.head()
df.tail()
df.columns
df.shape
df['키'].describe()

df['키'].min() #max(), sum(), mean(), count(), unique(), nlargest(5)
df.sort_values('개봉 연도', ascending=False)

DataFrame() 활용

#컬럼 선택
df['이름'] # =df[df.columns[0]]
df['SW특기'] # =df[df.columns[-1]], -1은 제일 마지막 의미

#Slicing
#df[컬럼(들)][row범위]
df['영어'][0:5]
df[['이름', '키']][4:]
df[df.columns[4:6]][1:5]

#loc
df.loc['6번', '영어'] #index 6번의 영어 값
df.loc[['6번', '2번'], ['영어','수학', '과학']]
df.loc['1번':'5번', '국어':'사회']

#iloc
df.iloc[1:4, 2:5]
df.iloc[[5,7], [1,2,3]]

조건 선택

df.loc[df['키']>=185,['이름', '수학', '사회']] # 조건이 True인 row들, 선택된 컬럼 데이터값
df.loc[(df['키']>=185) & (df['학교'] == '북산고'), ['이름','수학', '영어']] # 괄호 사용 주의

df.loc[df['이름'].str.startswith('송')]
df.loc[df['이름'].str.contains('태')]

langs = ['python', 'java']
filt = df['SW특기'].str.lower().isin(langs) 
df[filt]

apply

def add_cm(height):
    return str(height)+'cm'
df['키'] = df['키'].apply(add_cm)
def fn_capitalize(lang):
    if pd.notnull(lang):
        return lang.capitalize()
    return lang
df['SW특기'] = df['SW특기'].apply(fn_capitalize)
df