학습/데이터 분석
Pandas 기초 정리
DataJ
2025. 5. 14. 11:56
1️⃣ 데이터 준비 및 구조 이해
✅ 데이터셋 준비하기
import pandas as pd
df = pd.read_csv('sample.csv') # CSV 파일 불러오기
df.head() # 상위 5개 행 출력
✅ 데이터프레임 구조 가볍게 보기
df.shape # (행, 열) 확인
df.columns # 컬럼명 확인
df.info() # 데이터 타입, 결측치 확인
2️⃣ 인덱싱 및 조회
✅ 행 조회 (loc, iloc, slicing)
df.loc[0] # 라벨 기준 첫 번째 행
df.iloc[0] # 위치 기준 첫 번째 행
df[3:6] # 슬라이싱 (3 ~ 5행
3️⃣ Series가 중요한 이유
- Series는 Pandas의 1차원 자료구조
- DataFrame의 각 열은 Series로 구성됨
type(df['Age']) # pandas.core.series.Series
4️⃣ 기술통계 describe()
df.describe()
결과:
Age Income
count | 100 | 100 |
mean | 45.3 | 56000 |
std | 12.4 | 15400 |
min | 20 | 21000 |
5️⃣ 문자열 탐색: .str.contains()와 인덱싱
df[df['Job'].str.contains('Engineer')]
6️⃣ 수치 탐색과 산술연산
df['Income'] + 1000 # 소득 증가
df['Rate'] * 0.1 # 비율 계
7️⃣ DataFrame 생성
data = {'Name': ['A', 'B'], 'Age': [25, 30]}
df = pd.DataFrame(data
8️⃣ apply()와 주의사항
df['Age_category'] = df['Age'].apply(lambda x: 'young' if x < 30 else 'adult')
⚠️ apply()는 행/열 단위로 연산 가능하지만, 성능상 주의 필요
import pandas as pd
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 32, 18, 45]
})
df['Age_category'] = df['Age'].apply(lambda x: 'young' if x < 30 else 'adult')
#결과
''' Name Age Age_category
0 Alice 25 young
1 Bob 32 adult
2 Charlie 18 young
3 David 45 adult
'''
#활용
def age_group(x):
if x < 20:
return 'teen'
elif x < 40:
return 'young adult'
elif x < 60:
return 'middle-aged'
else:
return 'senior'
df['Age_category'] = df['Age'].apply(age_group)
9️⃣ 결측치 처리 (fillna, dropna)
df.fillna(0) # 결측값을 0으로 대체
df.dropna() # 결측치 포함 행 제거
df.fillna(method='ffill', limit=1) # 앞값으로 채우기 (1회 한정
df.dropna(how='any') # 하나라도 NaN이 있으면 제거
df.dropna(subset=['Age', 'Income']) # Age 또는 Income이 NaN인 행만 제거
- how='any': 하나라도 NaN이면 제거
- subset=[열목록]: 특정 열 기준으로만 판단
🔟 형변환 및 결측치 처리
df['Age'] = df['Age'].astype(int) # 형변환
🔢 집계 함수와 인자
df['Income'].quantile(0.25) # 1사분위수
df['Age'].mean()
다양한 분위수(percentiles) 및 범주형 포함 통계 요약 제공
df.describe(percentiles=[.25, .5, .75], include='all')
df.quantile(0.9, numeric_only=True)
- percentiles: 사분위 수 지정 (.25=1사분위, .5=중앙값, .75=3사분위 등)
- include='all': 수치형 외 범주형도 요약
- numeric_only=True: 수치형 컬럼만 계산
🔢 정렬 (sort_values, nlargest 등)
df.sort_values(by='Age', ascending=True) #전체정렬 필요할때
df.nlargest(3, 'Income') # 상위 3명 #위 함수보다 속도 빠르고 간단
데이터프레임에서 값 기준 정렬 또는 최댓값/최솟값 추출
df['Income'].nlargest(5) # 소득 상위 5명
df['Age'].nsmallest(3) # 나이 하위 3명
df.sort_values(by='Age', ascending=False) # 나이 내림차순 정렬
- nlargest(n), nsmallest(n): 빠르게 상위/하위 추출
- sort_values(by=컬럼명): 정렬 기준 설정
🔢 인덱스 제어
df = df.set_index('ID') # 특정 열을 인덱스로
df = df.reset_index(drop=True) # 인덱스 초기화
🔢 행/열 추가 및 삭제
df.drop([0, 1], errors='ignore') # 행 삭제
#인덱스가 0번과 1번인 행을 삭제
#errors='ignore'는 삭제하려는 인덱스가 없어도 에러가 나지 않게 해줌
df['NewCol'] = df['Age'] + 10 # 열 추가
df.insert(1, 'Flag', True) # 특정 위치에 열 삽입
# DataFrame의 두 번째 열 위치(인덱스 1)에, 'Flag'라는 이름의 열을 추가하고, 모든 값을 True로 채움
✂️ 열 조건부 제거 (dropna with subset)
df.dropna(subset=['Age']) # 특정 컬럼 기준 결측치 제거
📌 요약 표
기능 함수 주요 예시
행 조회 | loc, iloc | df.loc[0], df.iloc[3:5] |
결측치 처리 | fillna, dropna | df.fillna(0), df.dropna() |
정렬 | sort_values, nlargest | df.sort_values(by='Age') |
인덱스 설정 | set_index, reset_index | df.set_index('ID') |
열 조작 | insert, 연산 | df['New'] = df['Age'] + 1, df.insert(...) |
형 변환 | astype() | df['Age'].astype(int) |
집계 함수 | mean(), quantile() | df['Income'].mean() |