끄적끄적

2025.07.07 Pandas 실무 기초 세션 3 본문

[스파르타]내일배움캠프 데이터 분석 트랙/Session

2025.07.07 Pandas 실무 기초 세션 3

kminx 2025. 7. 9. 16:48
튜터 김연준 튜터님
학습 목표 1. 결측치가 포함된 데이터를 dropna() 와 fillna() 로 효과적으로 처리하는 방법을 익힌다.
2. assign()qcut()lambda 함수를 활용해 메서드 체이닝으로 새로운 열을 추가·변형하는 방법을 실습한다.
3. sort_values()sort_index()melt()pivot() 등을 사용해 데이터 형태를 길쭉한(long) ↔ 넓은(wide) 형태로 자유롭게 변환한다.
4. concat()으로 여러 Series·DataFrame을 병합하는 기본 원칙을 이해한다.
더보기

목차

  1. Pandas Handling Missing Data
  2. Make New Columns (메서드 체이닝)
  3. Pandas Reshaping Data
  4. Concat: 객체 합치기

 

1️⃣ Pandas Handling Missing Data

  • 결측값이 있는 행·열을 제거하거나 원하는 값으로 채워 데이터 완결성 확보
import pandas as pd
import numpy as np

# 예제 DataFrame 생성
df = pd.DataFrame(
    [[np.nan, 2, np.nan, 0],
     [3,     4, np.nan, 1],
     [np.nan, np.nan, np.nan, 5]],
    columns=list('ABCD')
)
df

 

📌 dropna() : 결측값이 있는 행(또는 axis에 따라 열)을 삭제

  • axis=1, how='any' : 어떤 결측이든 포함된 열 삭제
  • axis=0, how='all' : 전부 NaN인 행만 삭제
# 열 삭제 예시
df.dropna(axis=1, how='any')
# 행 삭제 예시
df.dropna(axis=0, how='all')

 

📌 fillna() : 결측값을 지정한 상수, 평균·중앙값, 전방·후방 채우기 등 원하는 값이나 방법으로 대체

  • 단일 값(0)으로 채우기
  • 컬럼별 다른 값 지정
  • 최대값·평균·중앙값으로 채우기
  • 전방(ffill)/후방(bfill) 채우기
# 0으로 채우기
df.fillna(0)

# 컬럼별 값 지정
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)

# D열의 최대값으로 채우기
fill_val = df['D'].max()
df.fillna(fill_val)

# 전방·후방 채우기
df.fillna(method='ffill')
df.fillna(method='bfill')

 

📌 결측치 개수 확인

df.isnull().sum()# 각 열별 NaN 개수
df.notnull().sum()# 각 열별 non-NaN 개수

 

 

2️⃣ Make New Columns (메서드 체이닝)

  • assign() 과 qcut(), lambda를 조합해 간결하게 새 열 생성·변형
import pandas as pd
import numpy as np

# 1~10 정수와 표준정규분포 난수로 DataFrame 생성
df = pd.DataFrame({
    'A': range(1, 11),
    'B': np.random.randn(10)
})
df.head()

 

📌 assign() : 메서드 체이닝 방식으로 새로운 열(column)이나 값을 추가할 때 사용하는 함수

  • lambda x: … 형태로 새로운 열 생성
  • 메서드 체이닝으로 기존 열 기반 추가
# ln_A 열 추가
df.assign(ln_A=lambda x: np.log(x.A)).head()

 

📌 속성 접근으로 열 생성

# 직접 속성 할당 (비추천 경고 발생)
df.ln_A = np.log(df.A)

 

📌 qcut() : 지정한 구간 수에 따라 거의 동일한 빈도로 나뉜 범주형(bin) 데이터로 변환하는 함수

# B 열을 하위 50%/상위 50%로 구간화
pd.qcut(df.B, 2, labels=["good", "bad"])

 

📌 기타 유용 메서드

df.max(axis=0)# 각 열 최댓값
df.min(axis=0)# 각 열 최솟값
df["B"].clip(1, 3)# 값 범위 하한=1 상한=3
df["B"].abs()# 절댓값

 

 

3️⃣ Pandas Reshaping Data

  • sort_values()sort_index()melt()pivot() 로 데이터 구조 자유자재 변환
import pandas as pd
import seaborn as sns

# mpg 데이터 로드
df = sns.load_dataset("mpg")
df = df.rename(columns={'model_year':'year'})
df.shape# (398, 9)

 

📌 sort_values() : 특정 열이나 여러 열의 값에 따라 행을 오름차순 또는 내림차순으로 재정렬할 때 사용

# mpg 기준 오름차순·내림차순
df.sort_values('mpg').head()
df.sort_values('mpg', ascending=False).head()

 

📌 sort_index() : 행 또는 열의 인덱스 순서에 따라 DataFrame을 재정렬할 때 사용

# 인덱스 순서 재정렬
df.sort_index().head()

 

📌 melt() : 넓은 형식의 데이터를 ‘변수–값’ 쌍이 있는 길쭉한(long) 형식으로 녹여낼 때 사용

# 예시 DataFrame
df2 = pd.DataFrame({
    'foo': ['one','one','two','two'],
    'bar': ['A','B','A','B'],
    'baz': [1,2,4,5]
})
# foo 고정, bar·baz 녹이기
pd.melt(df2, id_vars=['foo'], value_vars=['baz'])

 

📌 pivot() : 데이터를 지정한 인덱스와 컬럼 이름, 값 열을 기준으로 넓은 형식으로 재구조화

# pivot: bar를 열, foo를 인덱스로
df2.pivot(index='foo', columns='bar', values='baz').reset_index()

 

 

4️⃣ Concat : 객체 합치기

  • Series·DataFrame을 행(axis=0) 또는 열(axis=1) 방향으로 병합
import pandas as pd

# Series 합치기
s1 = pd.Series(['a','b'])
s2 = pd.Series(['c','d'])
pd.concat([s1, s2], ignore_index=True)
pd.concat([s1, s2], keys=['s1','s2'], names=['Series','RowID'])

# DataFrame 합치기
df1 = pd.DataFrame({'letter':['a','b'],'num':[1,2]})
df2 = pd.DataFrame({'letter':['c','d'],'num':[3,4]})
pd.concat([df1, df2])

 

📌 sort=False / join='inner' 옵션으로 열 합침 방식 제어

  • 서로 다른 컬럼 병합 시 NaN 발생 및 inner 조인 활용
df3 = pd.DataFrame({'letter':['c'],'num':[3],'animal':['cat']})
pd.concat([df1, df3], sort=False)
pd.concat([df1, df3], join='inner')

 

 

 

 


2025.07.08 - [[스파르타]내일배움캠프 데이터 분석 트랙] - 36일차 - 실무에서 필요한 Pandas 기초 1

 

36일차 - 실무에서 필요한 Pandas 기초 1

튜터김연준 튜터님학습 목표1. Pandas의 기본 데이터 구조 Series, DataFrame을 명확히 이해한다.2. 결측치 개념인 NaN과 Null의 차이를 파악하고 적절히 처리한다.3. 비교 연산자/논리 연산자/조건 필터링

kminx.tistory.com

2025.07.08 - [분류 전체보기] - 38일차 - 실무에서 필요한 Pandas 기초 2

 

38일차 - 실무에서 필요한 Pandas 기초 2

튜터김연준 튜터님학습 목표1. DataFrame에서 원하는 열(column)만 손쉽게 추출하는 방법을 익힌다.2. value_counts(), unique(), describe() 외에도 기초 통계 함수(sum(), count(), nunique() 등)를 활용해 데이터 특성

kminx.tistory.com