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 [ '북산고' ] 퍼센테이지

출처 : 나도코딩
'┤내일배움캠프├ > PYTHON LIB' 카테고리의 다른 글
파이썬 전처리&시각화 (2) | 2025.06.11 |
---|