Python 독학 데이터 애널리스트(DA)를 위한 Pandas 학습 기록
안녕하세요! 오늘은 Pandas를 활용해 데이터 다루는 법을 공부하면서 배운 내용을 정리해보려고 합니다.
이 글은 저처럼 Python을 독학하는 데이터 애널리스트(DA) 지망생을 위한 것이며, 제가 직접 궁금했던 부분과 해결한 과정을 공유합니다!
1. Pandas에서 데이터 개수 세기 (value_counts() vs shape)
데이터 분석을 할 때, 특정 컬럼에 있는 값들의 개수를 세야 할 때가 많습니다.
처음엔 value_counts()와 shape의 차이를 명확히 몰랐는데, 공부하면서 이해하게 된 내용입니다.
📍 value_counts()를 활용한 개수 세기
import pandas as pd
df = pd.read_csv('data/enrolment_1.csv') # 예제 데이터
city_counts = df['City / Urban area'].value_counts()
print(city_counts)
➡ 각 도시별 등장 횟수를 보여줌
Seoul 10
New York 8
Tokyo 5
📍 shape를 활용해 고유값 개수 세기
print(df['City / Urban area'].value_counts().shape)
➡ (249,)
- .shape를 사용하면 고유한 도시 개수(중복 제외) 를 알 수 있음!
배운 점
- value_counts()는 각 항목별 개수를 세고,
- .shape를 사용하면 고유한 값이 몇 개인지 알 수 있음!
- df['컬럼명'].nunique()를 쓰면 더 직관적으로 고유값 개수를 알 수 있음!
2. Pandas에서 조건을 만족하는 값 변경하기 (df.loc[])
오늘 배운 또 하나의 핵심은 특정 조건을 만족하는 행을 찾아서 값을 바꾸는 방법입니다.
데이터를 다룰 때 특정 조건을 적용해야 할 때가 많아요!
📍 조건을 활용한 값 변경
df.loc[df['year'] == 1, 'status'] = 'not allowed' # 1학년은 수강 불가
df.loc[(df['year'] == 4) & (df['course name'] == 'commerce'), 'status'] = 'not allowed' # 4학년 상경계열 제한
➡ 조건에 맞는 행들의 값을 한 번에 변경 가능!
배운 점
- df.loc[조건, '변경할 컬럼'] = '변경 값' 형태로 사용
- &, | 연산자를 사용할 때는 반드시 괄호로 묶기
- 특정 컬럼이 특정 값 목록에 속하는지 확인할 땐 isin() 활용
df.loc[df['course name'].isin(['math', 'physics']), 'status'] = 'not allowed'
➡ math나 physics 과목이면 수강 불가로 설정!
3. value_counts() 결과를 리스트로 변환해 활용하기
수강신청 데이터에서 강의실을 배정하는 작업을 하다가 배운 개념입니다.
처음엔 헷갈렸는데, value_counts() 결과에서 .index를 쓰면 고유한 값 목록을 가져올 수 있어요.
📍 value_counts().index 사용 예시
course_counts = df.loc[df['status'] == 'allowed', 'course name'].value_counts()
# 수강 인원이 80명 이상인 과목을 리스트로 변환
auditorium_list = list(course_counts[course_counts >= 80].index)
➡ 이렇게 하면 80명 이상 수강하는 과목의 리스트를 만들 수 있음!
배운 점
- value_counts()는 Series 형태라서, .index를 쓰면 고유한 값 목록을 리스트로 변환 가능
- list(df['컬럼명'].unique())도 비슷한 역할을 함!
4. apply() 대신 벡터 연산 사용하기 (속도 최적화)
처음엔 apply()가 편해서 자주 썼는데, 속도가 너무 느려지는 문제가 있었어요.
벡터 연산을 사용하면 훨씬 빠르게 작업할 수 있었습니다.
📍 apply() 사용 (비효율적)
df['discounted_price'] = df.apply(lambda x: x['price'] * 0.9, axis=1)
➡ 행을 하나씩 처리하므로 속도가 느림
📍 벡터 연산 사용 (효율적)
df['discounted_price'] = df['price'] * 0.9
➡ 벡터 연산을 활용하면 속도가 수십 배 증가! 🚀 배운 점
- apply()는 가능하면 피하고 벡터 연산 사용!
- Pandas는 배열 연산이 최적화되어 있어서 훨씬 빠름
5. to_csv()를 사용할 때 chunksize 활용
데이터를 저장할 때도 메모리를 고려해야 합니다.
오늘 배운 팁 중 하나는 큰 데이터를 저장할 때 chunksize를 사용하면 부담이 줄어든다는 것.
df.to_csv('processed_data.csv', index=False, chunksize=5000)
chunksize=5000 → 한 번에 5000개씩 저장해서 메모리 절약!
오늘 배운 핵심 정리
1️⃣ 데이터 개수 세기 → value_counts(), .shape, .nunique() 활용
2️⃣ 조건을 만족하는 값 변경 → df.loc[] 활용 (괄호 주의)
3️⃣ value_counts().index로 고유값 리스트 만들기 → list(df['컬럼명'].unique())도 가능
4️⃣ 연산 최적화 → apply() 대신 벡터 연산 사용 (속도 수십 배 차이)
5️⃣ CSV 저장 시 chunksize 활용 → 메모리 부담 줄이기
'DATA > Python' 카테고리의 다른 글
read_csv() 함수 주요 파라미터 (0) | 2025.02.05 |
---|---|
RFM 개념 (0) | 2025.02.05 |
Pandas에서 데이터 인덱싱 정리 & 예시 (0) | 2025.02.01 |
행복지수 시도별 분석 및 시각화 실습 (0) | 2024.08.28 |
[Python] 조코딩 - 점프투파이썬 강의 독학 D+7 (0) | 2024.06.20 |