2026/03/31 Tue.
코드카타 2문제 ( https://qc-standard.tistory.com/32 )- 데이터 전처리&시각화 3강
아티클 스터디 ( https://qc-standard.tistory.com/33 )- 개인 과제
TIL
⊙ 데이터 전처리 & 시각화 3강
● Pandas 설치
!pip install pandas #pandas 설치
!pip install seaborn #seaborn 설치
● import 명령어 : 라이브러리 불러오는 명령어
import pandas as pd #pandas를 pd라고 부를게
import seaborn as sns #seaborn을 sns라고 부를게
data = sns.load_dataset('tips') # tips라는 이름의 데이터 셋을 불러와서 data 변수에 저장
data # 데이터 출력
● 데이터 불러오기, 저장하기, 인덱스
● 데이터 불러오기 |
|
|
df = pd.read_csv("./tips_data.csv")
df
|
# pd.read_확장자('.폴더명/파일명.확장자')
# 확장자 # excel - xlsx # csv - csv # csv - xlsx # ./ → 현재 위치
|
● 데이터 저장 |
|
|
data.to_csv("폴더명./tips_data.csv")
df. to_csv("폴더명/tips_data.csv" , index=False) #엑셀 저장하는 법
df.to_excel("파일이름/tips_data.xlsx", index = False)
|
# () 안에 파일경로 저장할파일명 확장자
|
● 인덱스 |
|
|
# 컬럼 인덱스 없이 불러오기
df = pd.read_csv()"./tips_data.csv", index_col=0) data.to_csv("./tips_data.csv", index=False) ![]() |
#별도의 인덱스 설정이 없으면 인덱스가 컬럼의 형태 가되는 경우가 있음 # index_col=0 # index=False ![]() |
|
#인덱스 X
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
})
df
![]() |
#인덱스 O df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['a', 'b', 'c']
}, index=['idx1', 'indx2', 'indx3'])
df
![]() |
|
#특정 인덱스 출력 : loc
df.loc['indx2']
#indx2 행에 대한 정보만 출력
|
![]() |
|
#인덱스 순서 정렬 : 기본적으로 오름차순
df.sort_index()
|
![]() |
|
#인덱스 재지정
df.set_index('A')
#A라는 컬럽을 인덱스로 쓰겠다 → A 값이 인덱스로 됨
|
![]() |
|
# 인덱스 값 확인
df.index
|
|
|
#인덱스 추가
df.index = ['ㄱ', 'ㄴ', 'ㄷ']
df
|
![]() |
|
#기존 인덱스로 되돌림
df.reset_index()
df.reset_index(drop=True)
|
![]() |
● 컬럼(Column)
: 데이터 프레임(DataFrame)의 열 또는 변수, 세로방향에 있는 데이터들
: 행은 row 또는 인덱스라고 함
|
#특정 컬럼 추출
df['이름']
|
![]() |
|
#컬럼 확인
df.columns
|
|
|
#컬럼 순서 변경
df.['A', 'B'] → df.['B', 'A']
|
|
|
#컬럼 이름 변경
df.rename(columns={'name':'이름' , 'age':'나이' , 'gender':'남/여'})
|
![]() ![]() |
|
#컬럼 추가
df['스포츠'] = '야구'
df
|
![]() |
|
#컬럼 삭제
del df['나이']
df
|
![]() |
데이터 확인
● .head()
|
df.head()
|
![]() → 기본적으로 5개 데이터 제공 |
|
df.head(7)
#괄호 안에 숫자(N)를 넣으면 N행 까지 데이터 제공
|
![]() |
● .info()
: 데이터 프레임에 대한 정보 확인
: 주데이터 타입 / 컬럼에 대한 null값이 카운트
: float(소수점이 있는 숫자), int(정수)에 대한 숫자 타입의 컬럼 값들만 기초 통계 확인 가능
|
df.info()
|
![]() |
● .describe()
: 사카운트 갯수 / 평균, 표준 편차, 최대값, 최소값, 각 4분위 값에 대한 기초 통계량 확인 가능 메서드
: float(소수점이 있는 숫자), int(정수)에 대한 숫자 타입의 컬럼 값들만 기초 통계 확인 가능
|
df.describe()
|
![]() |
● 데이터 타입 확인
|
#데이터 타입 확인 df.dtype
|
|
#컬럼별 dtype 확인
df['size'].dtype
|
● 결측치 확인 = nuull값 확인
|
#1
df.info()
|
![]() #non-null : null값이 아닌 값 = 정상값?
#A 컬럼에는 non-null 4개
#B 컬럼에는 non-null 3개
#non-null값 갯수 차이로 'B'에 null값 여부 알 수 있음
|
|
#2 - null값 직접 확인
df.isna()
|
![]() #null값 = True |
|
#3
df.isnull()
|
![]() |
|
#3 #결측치 갯수 확인 가능
df.isnull().sum()
|
![]() |
|
# 결측치 제거 : dropna()
df.dropna()
|
● 중복 데이터 확인 및 제거
|
# 중복 데이터 확인 df.duplicated( )
|
|
# 중복 데이터 제거
df.drop_duplicates( )
|
● .astype() 데이터 타입 변경 : Pandas 데이터 프레임의 열=colum 데이터 타입 변경에 사용
#기존 float 타입을 string으로 바꾼다
df['total_bill'] = df['total_bill'].astype(str)
#float → string으로 바꾼걸 확인
df.info()
|
![]() |
데이터 타입 |
설명 |
| int 64, int32 | 정수형 데이터(64비트, 32비트) |
| float64, float32 | 부동 소수점 수(64비트, 32비트) |
| object | 문자열 데이터(일반적 문자열) |
| bool | 불리언(참/거짓) 데이터 |
| datetime64 | 날짜와 시간 데이터 |
| timedelta64 | 시간 간격 데이터 (두 날짜 또는 시간사이의 차이) |
| categgory | 카테고리형 데이터 (제한된 고유값으로 구성) |
데이터 선택
● 특정 행, 열 선택 = 슬라이싱 = Slicing & Selection
.iloc[ ]
|
.loc[ ] |
인덱스 번호로 특정 행과 열 선택
|
이름으로 특정 행, 열 선택 |
.iloc[row start : row end+1 : 간격]
|
.loc[행 이름, 컬럼명]
|
\ : 줄바꿈
데이터 선택
● 불리언 인덱싱 = Boolean Indexing
- 특정 조건을 만족하는 행만 선택하는 방법
- 데이터 필터링 or 원하는 조건에 만족하는 행 추출
- 조건식에 따라 True False로 평가
df['day'] = 'sun'
df
- 'sun' 행은 Ture
- Not 'sun' 행은 False
df[df['age'] >= 30]
- 'age' 컬럼(열)에서 '30 이상' 행 필터링
- 여러 조건 : (조건 1) & (조건 2)
df[df['day'] .isin('Sun', 'Thu')]
- 'day' 컬럼에서 'Sun' 또는 'Thu' 행 필터
데이터 병합
● concat( ) : 위아래 / 좌우로 병합
.axis = 0 위아래
|
.axis = 1 좌우 |
pd.concat([df1, df2]), reset_index(drop=ture)
|
pd.concat([df1, df2], axis=1) |
ignore_index : df 인덱스 유지/새롭게
|
|
● merge( ) : 특정 컬럼을 중심으로 좌우 병합
- on : 병합 기준이 되는 컬럼
- how : 병합 방법
pd.merge(df1, df2, on='key', how='outer')
- 'key' 컬럼을 중심으로 병합
- 'outer'형식으로 병합 - inner 기본값

데이터 집계
● groupby( ) : 데이터프레임을 그룹화 / 그룹단위로 분할(split) / 적용(apply) / 결합(combine)
- 컬럼 기준 그룹 생성 → 그룹 단위 연산 → 결과 결합
df.groupby('category').mean( ) |
카테고리 컬럼 값(value) 평균 |
df.groupby('category').sum( ) |
카테고리 컬럼 값(value) 합 |
df.groupby('category').count( ) |
카테고리 컬럼 값(value) count |
df.groupby('category').max( )
df.groupby('category').min( ) |
카테고리 컬럼 값(value) 최대 / 최소 |
df.groupby('category').first( ) |
|
df.groupby('category').agg( list )
df.groupby('category', 'Subcategory').agg( {'value1' : ['mean', 'sum'], 'value2' : 'sum'} ) |
어그리게이션
|
● Pivot Table( )
- 피벗테이블 : 기존 데이터프레임을 재구성ㅇ하여 요약/정리해 보여주는 테이블 형태
|
data = {
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
'Category': ['A', 'B', 'A', 'B', 'A'],
'Value1': [10, 20, 30, 40, 50],
'Value2': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)
# 피벗 테이블 생성: 'Date'를 행 인덱스로, 'Category'를 열 인덱스로, 값은 'Value1'과 'Value2'의 평균으로 집계
pivot = df.pivot_table(index='Date', columns='Category', values=['Value1', 'Value2'], aggfunc='mean')
|
● 데이터 정렬
sort_values( ) → sort_values(by='age') : age 컬럼을 기준으로 오름차순
sort_index( )
'내일배움캠프(QC,QA_5기)' 카테고리의 다른 글
| [내일배움캠프_QA/QC 5기] 21일차 _ 팀 프로젝트 _ 제약 데이터 전처리 (1) | 2026.04.06 |
|---|---|
| [내일배움캠프_QA/QC 5기] 20일차 _ 팀 프로젝트 _ 제약 데이터 분석 기획서 (0) | 2026.04.03 |
| [내일배움캠프_QA/QC 5기] 14일차 (0) | 2026.03.26 |
| [내일배움캠프_QA/QC 5기] 13일차 _ 데이터 전처리&시각화 1,2강 (0) | 2026.03.25 |
| [내일배움캠프_QA/QC 5기] 12일차 _ 파이썬 5강 (0) | 2026.03.24 |


























