본문 바로가기

┤내일배움캠프├/PYTHON LIB

데이터 분석 및 시각화 - Pandas

728x90

00. Pandas

import pandas as pd


01. Series

1. Series 객체 생성

temp = pd.Series ( [ -20, -10, 10, 20 ] )

temp[0] , temp[2]

2. Series 객체 생성 ( Index 지정 )

temp = pd.Series  ( [ -20, -10, 10, 20 ] , index = [ 'Jan', 'Feb', 'Mar', 'Apr' ]

temp[ 'Jan' ], temp[ 'Apr' ]


02. DataFrame

data = {  'KEY' : [ 데이터1, 데이터2, 데이터3, ...]  } - 딕셔너리

1. DataFrame 객체 생성

df = pd.DataFrame ( data )

2. DataFrame 데이터 접근

df [ '이름' ], df [ '키']

df [ [ [ '이름', '키' ] ] )    

3. DataFrame 객체 생성 ( Index 지정 ) 

df = pd.DataFrame (data, index = [ '1번', '2번'. '3번', ... , '8번 ] )

4. DataFrame 객체 생성 ( Column 지정 )

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


03. Index

df.index

1. Index 이름 설정

df.index.name = '지원번호'

2. Index 초기화

df.reset_index() : 위에 '지원번호' 인덱스는 일반 컬럼이 되고, 0~7이 적힌 새로운 인덱스가 생김

df.reset_index( drop = True ) : '지원번호' 인덱스를 아예 삭제된 것 처 럼 보 이 게 함 (실제 데이터 반영 X)

df.reset_index( drop = True , inplace = True  ) : '지원번호' 인덱스를 아예 없애버린 것 (실제 데이터 반영 O)

3.  Index 설정 (지정한 column으로)

df.set.index ( '컬럼명', inplace = True ) 

4. Index 정렬

df.sort_index()

df.sort_index( ascending = False ) 내림차순


04. 파일 저장 및 열기

1. 저장

df.to_csv( '파일명.csv' , encoding = euckr )

df.to_csv( '파일명.csv' , encoding = ' uft-8-sig ' , index = False ) 인덱스 없이 저장

 

df.to_csv( '파일명.txt' , sep = ' \t ' )   tab으로 구분된 텍스트 파일

 

df.to_excel( '파일명.xlsx' )

2. 열기

df = pd.read_csv( '파일명.csv' )

df = pd.read_csv( '파일명.csv' , skiprows = 1 )   지정된 row를 건너뜀

df = pd.read_csv( '파일명.csv' , skiprows = [ 1,3,5] )   지정된 row들을 건너뜀

df = pd.read_csv( '파일명.csv' , nrows = 4 )   지정된 row 개수만 가져옴

df = pd.read_csv( '파일명.csv' , skiprows = 2, nrows = 4 ) 첫 row 2개 건너뜀, 그 밑에 4개만 가져옴

 

df = pd.read_csv( '파일명.txt' , sep = '\t' )

df = pd.read_csv( '파일명.txt' , sep = '\t' , index_cil = '지원번호' ) 방법1

df = pd.read_csv( '파일명.txt' , sep = '\t' )

df.set_index( '지원번호', inplace = True) 방법2

 

df = pd.read_excel('파일명.xlsx' , index_col = '지원번호' )


05. 데이터 확인

1. DataFrame 확인

df.describe()  개수, 평균, 표준편차, 최소, 최대값 등

df.info()

df.head()  디폴트 5개, 괄호 안에 숫자 넣으면 그만큼 보여줌

df.tail()     디폴트 5개, 괄호 안에 숫자 넣으면 그만큼 보여줌

df.values

df.index

df.columns

df.shape   (row, column) 개수 나옴

2. Series 확인

df [ '컬럼' ] 

df [ '컬럼' ].describe()

df [ '컬럼' ].min()

df [ '컬럼' ].max()

df [ '컬럼' ].nalrgest(3)

df [ '컬럼' ].mean()

df [ '컬럼' ].sum()

df [ '컬럼' ].count()

df [ '컬럼' ].unique()  중복 제외 (SQL의 distinct같은)

df [ '컬럼' ].nunique() unique의 개수


06. 데이터 선택 (기본)

1. Column 선택 (label)

df['이름']

df[ ['이름', '키']

2. Column 선택 (정수 index)

df.columns

df.columns[0] , df.columns[2]

df[ df.columns[0] ] , df[ df.columns[-1] ]

3. 슬라이싱

df[ '영어' ][ 0 : 5 ]

df[ [ '이름', '키'] ][ : 3 ]


07. 데이터 선택 (loc)

이름을 이용해 원하는 row에서 원하는 col 선택

Column 선택 (label)

df.loc[ '1번' ] , df.loc[ '5번' ]

df.loc[ '1번'  , '국어' ] 

df.loc[ ['1번', '2번']  , ['영어', '수학'] ]  대괄호 2개

df.loc[ '1번' : '5번', '국어' : '사회' ]  슬라이싱 2개 - 1) 대괄호 1개씩 , 2)'5번' 과 '사회'가 포함O


08. 데이터 선택 (iloc)

위치를 이용해 원하는 rowd에서 원하는 col 선택

 

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

df.iloc[0:5]  슬라이싱 여기서는 5를 포함하지 않음

df.iloc[0, 1] 쉼표의 경우, 0번째 위치의 1번째 값 가져옴

df.iloc[[0, 1], 2] 쉼표의 경우, 0, 1번째 위치의 2번째 값 가져옴

df.iloc[[0, 1], [3, 4]] 쉼표의 경우, 0, 1번째 위치의 3, 4번째 값 가져옴

df.iloc[ 0:5, 3:8 ] 슬라이싱 2개 - 1) 대괄호 1개씩 , 2) 4번째, 8번째까지 가져옴 (포함X)


09. 데이터 선택 (loc)

df [ '키' ] >= 185   T/F로 나옴

condition = ( df [ '키' ] >= 185 ) , df [ condition ] , df [~condition]

df [ df [ '키' ] >= 185 ]

df.loc [ df [ '키' ] >= 185, '수학' ] 

df.loc [ df [ '키' ] >= 185, [ '이름', '수학', '과학' ]

1. 다양한 조건 :  [ ( ) & ( ) ]

df.loc [ (df [ '키' ]  >= 185) & (df[ '학교' ] == '북산고' )  ]   

2. 다양한 조건 : [ ( ) | ( ) ] 

df.loc [ (df [ '키' ]  < 170 ) | (df[ '키' ] > 200 )  ]   

3. str 함수

condition = df[ '이름' ] .str.startswith('송') , df [ condition ]

condition = df[ '이름' ] .str.contains('태') , df [ condition ]

condition = df[ '이름' ] .str.contains('태') , df [ ~condition ]

 

langs = [ 'Python', 'Java' ]

condition = df[ 'SW특기' ].isin(langs) , df [condition]

 

langs = [ 'Python', 'Java' ]

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

 

condition = df[ 'SW특기' ].str.contains( 'Java' )   contains는 NaN처리해줘야 함

condition = df[ 'SW특기' ].str.contains( 'Java', na = False ), df[condition]

 


10. 결측치 (NaN)

1. 데이터 채우기 fillna

df.fillna('') , df.fillna('없음') - inplace = True 해야 반영

 

import numpy as np

df['학교'] = np.nan 인위적으로 NaN 채우기

 

df ['컬럼명'].fillna('확인 중', inplace = True)

2. 데이터 제외하기 dropna

  • axis = index(가로줄 삭제) / columns(세로줄 삭제)
  • how = any(결측치 하나라도 있으면) / all(결측치가 컬럼 전체라면)

df.dropna() - inplace = True 해야 반영

df.dropna(axis = 'index', how = 'any')

df.dropna(axis = 'columns', how = 'any')

df.dropna(axis = 'columns', how = 'all')


11. 데이터 정렬

df.sort_values( '컬럼' )

df.sort_values( '컬럼' , ascending = False )

 

df.sort_values( [ '수학', '영어'] , ascending = False)

df.sort_values( [ '수학', '영어'] , ascending = [ False, True ] )

 

df[ '키' ].sort_values()

df[ '키' ].sort_values(ascending = False)

 

df.sort_index()

df.sort_index(ascending = False)


12. 데이터 수정

1. Column 수정

df [ '컬럼' ] . replace( { 'A'  : 'B' ,  'C'  :  'D' } )    replace( { } ) dict의 { 전 : 후, 전 : 후 } 형식임

df [ '컬럼' ] . replace( { 'A'  : 'B' ,  'C'  :  'D' }, inplace = True )

 

df [ 'SW특기' ] = df [ 'SW특기' ] .str.lower()

df [ 'SW특기' ] = df [ 'SW특기' ] .str.upper()

 

df [ '학교' ] = df [ '학교' ]  + '등학교'

 

2. Column 추가

df [ '총합' ] = df [ '국어' ] + df [ '영어' ] +  df [ '수학' ] +  df [ '과학' ] +  df [ '사회' ]

df  [ '결과' ] = 'Fail'

df.loc [ df ['총합'] > 400, '결과' ] = 'Pass'

 

3. Column 삭제

df.drop (columns = [ '총합' ] ) 

df.drop (columns = [ '국어', ' 영어', '수학' ], inplace = True )

 

4. Row 삭제

df.drop (index = [ '4번' ] ) 

 

condition = df ['수학'] < 80

df[condition].index

df.drop ( index  = df[condition].index )

 

5. Row 추가

df.loc ['9번'] = [ 리스트로 column 개수만큼 데이터 추가 ]

 

6. Cell 수정

df.loc [ '4번', 'SW특기' ] = 'Python'

df.loc [ '5번, [ '학교', 'SW특기' ] ] = ['A고등학교', 'C']

 

7. Column 순서 번경

cols = list(df.columns)

df = df [ [cols[-1] ] + cols [ 0 : -1 ] 맨 뒤에 있는 결과 column을 앞으로 가져오고, 나머지 column들과 합쳐서 순서 변경

 

8. Column 이름 번경

df.columns = [ 'Result', 'School', 'Name' ]

 


13. 함수 적용

데이터에 함수 적용 (apply)

def add_cm(height):

    return str(height) + 'cm'

df [ '키' ] = df [ '키' ].apply(add_cm) 

 

def capitalize(lang):

    if pd.notnull(lang):

        return lang.capitalize()

    return lang

df [ 'SW특기' ] = df [ 'SW특기' ].apply(capitalize)

df [ 'SW특기' ].str.capitalize()


14. 그룹화 .groupby( )

df.groupby('학교')

df.groupby('학교').get_group('북산고')

df.groupby('학교').mean(numeric_only = True)  숫자형 값만 계산하기 위해 numeric_only = True 필요 (Pandas 2.0.0 이후)

 

df.groupby('학교').size()  개수

df.groupby('학교').size()[ '능남고' ]  능남고에 해당하는 개수

 

df.groupby('학교')[ '키' ].mean( numeric_only = True ) 

df.groupby('학교')[ '국어', '영어', '수학' ].mean( numeric_only = True )

 

df.groupby( ['학교', '학년'] ).mean( numeric_only = True )

df.groupby( ['학교', '학년'] ).sum( numeric_only = True )

 

df.groupby( '학년' ).mean( ).sort_values( '키' )

df.groupby( '학년' ).mean( ).sort_values( '키' , ascending = True )

 

df.groupby('학교')[ 'SW특기' ].count()

df.groupby('학교')[ '이름', 'SW특기' ].count()

 

school = df.groupby( '학교' )

school[ '학년' ].value_counts() 

school[ '학년' ].value_counts().loc[ '북산고' ]

school[ '학년' ].value_counts(normalize = True).loc [ '북산고' ] 퍼센테이지

 

 

 

 

출처 : 나도코딩

 

728x90

'┤내일배움캠프├ > PYTHON LIB' 카테고리의 다른 글

파이썬 전처리&시각화  (2) 2025.06.11

google.com, pub-9332256070510669, DIRECT,f08c47fec0942fa0