판다스(PANDAS)
0. pandas 라이브러리 임포트
import pandas as pd
1. 데이터 불러오기
pd.read_excel(’파일경로/파일명.xlsx’, index_col=’컬럼명’)
pd.read_csv(’파일경로/파일명.csv’, index_col=’컬럼명’, encoding='인코딩방식')
- 파일경로
- 절대경로 : C:부터 지정하는 경로 (
“C:/폴더명/파일명.확장자”)
- 상대경로 : 현재위치(./)를 기준으로 지정하는 경로 (
“./폴더명/파일명.확장자”)
index_col = ‘컬럼명’ 또는 칼럼번호 : 인덱스로 사용할 컬럼 지정
encoding = ‘utf-8’(기본값) / ‘cp949’ (MS-Office 엑셀에서 저장한 경우)
header = 행인덱스번호 : 몇번째 행부터 표 데이터로 볼것인지 지정
thousands = ‘,’ : 천단위기호(,)사용 → x,xxx를 문자가 아닌 숫자로 인식
pd.set_option('display.max_columns', n)
- 컬럼개수가 많아 가운데 ‘…’으로 생략될 경우, n개 컬럼 보이게 지정
2. 데이터 확인하기
df.head()
df.tail()
df.info()
df.describe()
df.set_index(’칼럼명’)
df.shape
3. 데이터 선택하기
df.iloc[행번호, 열번호]
df.loc[’행이름’, ‘열이름’]
df.iloc[ 1, 1:3]
df.loc[ : , [’칼럼명1’, ‘칼럼명2’]]
df[’칼럼명’]
df[ 조건 ]
- 불리언 인덱싱 예시
data[ (data['수학']>80) & (data['영어']>70) ]
: '수학'이 80보다 크고, '영어'가 70보다 큰 데이터 선택
4. 데이터 추가하기
df[’new칼럼명’] = 값
df[’new칼럼명’] = [값1, 값2, …]
df[’new칼럼명’] = 기존 칼럼명을 이용한 수식
- 예시
data['음악'] = 90
: 칼럼에 '음악'을 추가하고 해당 값을 모두 90으로 추가
data['체육'] = [100,90,60]
: 칼럼에 '체육'을 추가하고 각 인덱스에 100,90,60을 차례대로 추가
data['국영수'] = (data['국어']+ data['영어']+data['수학'])/3
: 칼럼'국영수'를 추가하고 국어,수학,영어의 평균을 추가
5. 데이터 표 병합하기
pd.merge(df1, df2, how = 'left | right | inner | outer',
left_on='컬럼명1', right_on='컬럼명2',
left_index=True|False, right_index=True|False,
on='동일컬럼명')
how = ‘left’ | ‘right’ | ‘inner’ | ‘outer’ : 병합 기준
left : 왼쪽 테이블(df1)의 키 값을 기준으로 병합
right : 오른쪽 테이블(df2)의 키 값을 기준으로 병합
inner : 양쪽 테이블에 동시에 존재하는 키 값을 기준으로 병합
outer : 양쪽 테이블 중 한번이라도 존재하는 모든 키 값을 기준으로 병합
left_on=‘칼럼명1’, right_on=‘칼럼명2’ : 칼럼명을 키 값으로 병합 (왼쪽테이블의 ‘칼럼명1’과 오른쪽테이블의 ‘칼럼명2’를 키 값으로 병합)
on = ‘칼럼명’ : 양쪽테이블의 키 값으로 사용할 칼럼명이 동일할 경우
left_index=True, right_index=True : 인덱스를 키 값으로 병합
- left_on, right_on 을 사용하거나, on을 사용하거나, left_index, right_index 를 사용하거나 ! => 셋 중 하나 선택하여 사용!
pd.concat([df1,df2])
- 주의 : 데이터프레임들을 리스트형태([])로 !!
6. 데이터 저장하기
df.to_excel('파일경로/파일명.xlsx', index=False)
df.to_csv('파일경로/파일명.csv', index=False)
index = True(기본값, 인덱스도 저장) | False(인덱스는 저장 안함)
7. 집계
df.pivot_table(index='컬럼명', columns='컬럼명', values='컬럼명', aggfunc = '함수')
df.isnull()
df.fillna(값)
- 사용 예시 : 이름 사용 빈도수 집계
- 인덱스는 이름으로, 값은 등록된 수를 모두 더하여, 성별로 구분하여 피벗테이블 작성
name = data.pivot_table(index='Name', values='Number', aggfunc='sum', columns='Sex')
name = name.fillna(0) : NaN자리에 0을 대입하여 저장
8. 정렬하기
df.sort_values(by='컬럼명', ascending=False)
by = ‘칼럼명’ 또는 [’칼럼명1’, ‘칼럼명2’, …] : 정렬할 기준
ascending = True(기본값, 오름차순) | False(내림차순)
df[’칼럼명’].sort_index(ascending = False) : 칼럼을 인덱스를 기준으로 정렬
df[’칼럼명’].sort_values(ascending = False) : 칼럼을 값을 기준으로 정렬
df['컬럼명'] : 시리즈(Series)
- 시리즈의 정렬은 2차원(행,열)이 아닌 1차원이므로 기준값(by) 지정할 필요 없음!
9. 컬럼별 데이터 종류 확인하기
df['칼럼명'].unique()
df['칼러명'].value_counts(dropna=True)
dropna = True (기본값, null값 제외) | False (null값 포함)
10. 그 외
df.groupby([’칼럼명1’])[’칼럼명2’].mean()
df.drop(’칼럼명’, axis=1)
df.sum(axis=0)
df.sum(axis=1) ⇒ (df[’칼럼명1’] + df[’칼럼명2’] + …) 와 동일
df.reset_index(drop=False)
df.rename(columns = {’기존컬럼명‘ : ‘새로운컬럼명‘})
df.astype(타입)
df.astype({’컬럼명’:’타입’})
df.get_dummies(data=df, columns=’범주형 칼럼명’)
df[’칼럼명’].str.replace(’기존문자열’, ‘새로운문자열’)
df[’칼럼명’].str.slice(n, m)
pd.to_datetime(df[’칼럼명’])
df[’칼럼명’].dt.year[|month|day|weekday|weekofyear]