Pandas Reference
Pandas 데이터 분석 레퍼런스
Pandas Reference 소개
Pandas 레퍼런스는 데이터 분석 및 조작을 위한 파이썬 pandas 라이브러리의 포괄적인 치트 시트입니다. DataFrame 생성 및 검사, Series 연산, 라벨·위치 기반 인덱싱, DataFrame 병합 및 연결, groupby 집계, 시계열 연산, CSV/Excel/JSON/SQL/Parquet I/O, 결측값 처리 등 8개 카테고리에 걸쳐 완전한 파이썬 예제를 포함합니다.
이 레퍼런스는 표 형식 데이터를 다루는 데이터 과학자, 데이터 엔지니어, 파이썬 개발자를 위해 설계되었습니다. `df.loc[]`와 `df.iloc[]`의 차이, 다중 컬럼 `agg()` 호출의 정확한 구문, 또는 시계열을 월별 빈도로 리샘플링하는 방법을 빠르게 찾을 때 공식 문서를 뒤지지 않고 몇 초 만에 답을 얻을 수 있습니다.
이 레퍼런스는 일반적인 데이터 분석 워크플로를 따라 구성됩니다: `pd.read_csv()`나 `pd.read_sql()`로 데이터를 로드하고, `df.info()`와 `df.describe()`로 탐색하고, `df.dropna()`와 `df.fillna()`로 정제하고, `df.groupby()`와 `df.pivot_table()`로 변환한 후, `df.to_csv()`나 `df.to_parquet()`로 내보냅니다. 각 항목에는 정확한 메서드 시그니처와 실행 가능한 코드 스니펫이 포함되어 있습니다.
주요 기능
- DataFrame 생성, 검사(info, describe, shape) 및 컬럼명 변경
- Series의 value_counts, unique, apply, map, 문자열 연산을 위한 str 접근자
- df.loc[]를 사용한 라벨 기반 인덱싱과 df.iloc[]를 사용한 위치 기반 인덱싱
- 불리언 필터링, df.query() 문자열 표현식, sort_values()
- inner/left/outer 조인 타입을 지원하는 pd.merge(), pd.concat(), df.join()
- 다중 컬럼 집계를 위한 agg()를 사용한 df.groupby()와 pivot_table()
- 시계열: pd.to_datetime(), resample(), rolling() 이동 평균, dt 접근자
- isna()로 결측값 감지, fillna()로 채우기, interpolate()로 보간
자주 묻는 질문
df.loc[]와 df.iloc[]의 차이점은 무엇인가요?
`df.loc[]`는 라벨로 행과 열을 선택합니다 — 인덱스 라벨과 컬럼 이름이 포함됩니다. `df.iloc[]`는 0부터 시작하는 정수 위치로 선택합니다. 인덱스에 날짜나 ID 같은 의미 있는 라벨이 있는 경우 `loc`를 사용하고, 처음 5행과 처음 2열을 선택하는 `df.iloc[0:5, 0:2]`처럼 위치 기반 슬라이싱에는 `iloc`를 사용하세요.
여러 조건으로 DataFrame을 필터링하는 방법은?
AND에는 `&`, OR에는 `|`를 사용한 불리언 인덱싱을 사용하세요: `df[(df["age"] > 20) & (df["city"] == "Seoul")]`. 파이썬 연산자 우선순위 때문에 각 조건을 괄호로 감싸야 합니다. 대안으로 더 읽기 쉬운 문자열 기반 구문인 `df.query("age > 20 and city == 'Seoul'")`를 사용할 수 있습니다.
pd.merge()와 pd.concat()의 차이점은?
`pd.merge()`는 키 컬럼으로 DataFrame을 조인합니다. SQL JOIN 연산과 유사하며 inner, left, right, outer 조인 타입을 지원합니다. `pd.concat()`은 키로 매칭하지 않고 DataFrame을 세로(행 방향, axis=0) 또는 가로(열 방향, axis=1)로 쌓습니다. 관계형 조인에는 merge를, 동일한 구조의 데이터셋 결합에는 concat을 사용하세요.
단일 groupby에서 여러 집계를 수행하는 방법은?
명명된 집계 구문과 `agg()`를 사용하세요: `df.groupby("dept").agg(avg=("salary", "mean"), cnt=("name", "count"))`. 이렇게 하면 `avg`와 `cnt` 컬럼이 있는 결과 DataFrame이 생성됩니다. "sum", "mean", "min", "max", "count", "std" 또는 커스텀 람다 함수를 포함한 모든 집계 함수를 혼합할 수 있습니다.
시계열을 다른 빈도로 리샘플링하는 방법은?
먼저 datetime 컬럼을 인덱스로 설정합니다: `df = df.set_index("date")`. 그런 다음 월별 평균은 `df.resample("M").mean()`, 주별은 "W", 일별은 "D", 시간별은 "H"를 사용합니다. `pd.date_range()` 함수는 지정된 빈도로 완전한 날짜 범위를 가진 DatetimeIndex를 생성합니다.
pandas에서 결측값을 처리하는 방법은?
`df.isna().sum()`으로 컬럼별 NaN 개수를 확인합니다. `df.fillna(값)`으로 NaN을 상수로 교체하거나, `df.fillna(df.mean())`으로 컬럼 평균으로 채우거나, 시계열 결측값에는 `df.interpolate(method="linear")`를 사용합니다. 특정 컬럼이 NaN인 행만 제거하려면 `df.dropna(subset=["col1", "col2"])`를 사용하세요.
pandas로 Parquet 파일을 읽고 쓰는 방법은?
`df.to_parquet("data.parquet")`로 쓰고 `pd.read_parquet("data.parquet")`로 읽습니다. Parquet는 컬럼 지향 바이너리 형식으로 특히 대용량 데이터셋에서 CSV보다 훨씬 빠르게 읽히고 파일 크기도 작습니다. 또한 읽을 때 dtype을 지정할 필요 없이 datetime과 카테고리형을 포함한 데이터 타입을 그대로 보존합니다.
str 접근자란 무엇이며 언제 사용해야 하나요?
Series의 `.str` 접근자는 모든 요소에 적용되는 벡터화된 문자열 메서드를 제공합니다. 주요 메서드로는 `str.lower()`, `str.upper()`, `str.contains("패턴")`, `str.split(" ")`, `str.strip()`, `str.replace()` 등이 있습니다. 대규모 Series에서 훨씬 더 나은 성능을 위해 `apply(lambda x: x.lower())` 대신 항상 `.str` 접근자를 사용하세요.