반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

Python으로 테이블의 열을 가져오기 본문

Python

Python으로 테이블의 열을 가져오기

현무랑 니니 2025. 7. 5. 21:42
반응형

개요

모든 테이블은 가로 행과 세로 열로 구성되며, 각 열의 첫 번째 값으로 해당 열 이름이 명시적으로 쓰여진 공통된 구조가 많다.

이런 테이블을 전문적으로 다루는 패키지가 판다스(Pandas)이다.

 

판다스는 1차원의 Series와 2차원인 DataFrame의 자료 구조를 가진다.

아래 그림은 서울 공유자전기 따릉이에 대한 사용 정보를 가진 데이터셋의 일부이다.

 

하나의 개별 열을 가져오는 방법은 아래와 같다.

 

여러 열을 동시에 선택하는 방법을 개별 열을 가져오는 것과 같이 하면 오류가 나며 리스트로 가져와야 한다.

왜 df['대여시간', '사용시간'] 는 오류가 나고 df[['대여시간', '사용시간']] 는 동작하는가?

 

구문  내부에서 전달되는 key DataFrame.__getitem__(key) 가 기대하는 형식 동작 결과
df['대여시간', '사용시간'] ('대여시간', '사용시간')
(튜플)
- 문자열 한 개 → Series 반환
- 리스트‑like 객체(리스트·Index·배열) → DataFrame 반환
- 튜플 → 단일 라벨 로 취급 (단‑일‑레‑벨 컬럼에서는 존재하지 않음)
단일‑레벨 컬럼에 ('대여시간','사용시간') 라벨이 없으므로 KeyError 발생
df[['대여시간', '사용시간']] ['대여시간', '사용시간']
(리스트)
“리스트‑like” 로 인식 → 여러 컬럼을 선택하는 정상 경로 두 컬럼을 갖는 DataFrame 반환

 

  • [] 한 겹getitem 으로 바로 전달된다..
    • 문자열 → 하나의 컬럼(Series)
    • 리스트 또는 팬더스 Index → 여러 컬럼(DataFrame)
    • 튜플은 “리스트‑like” 로 간주되지 않고 “라벨 하나” 로 해석된다.
  • 멀티인덱스(columns가 계층구조)인 DataFrame이라면 df[('A','B')] 같은 튜플‑라벨도 유효하지만, 일반 단일‑레벨 컬럼에서는 존재하지 않는 키이므로 오류가 난다.

판다스로 열을 가져오는 올바른 방법을 알아보자.

1. 하나의 특정 열 읽기

방법  코드  특징
단일 대괄호 df["대여일자"] 가장 직관적, 반환형은 Series
속성 접근 df.대여일자 짧고 편리하지만 열 이름에 공백·특수문자·숫자 시작 등이 있으면 사용 불가
.loc 인덱서 df.loc[:, "대여일자"] 행·열을 동시에 제어할 필요가 있을 때 유용

2. 여러 특정 열 읽기

방법  코드  특징
리스트 전달 df[["대여일자", "이동거리", "사용시간"]] 가장 많이 쓰는 표준 구문
.loc 인덱서 df.loc[:, ["대여일자", "이동거리", "사용시간"]] 행 조건과 결합하기 좋음
.filter(items=…) df.filter(items=["대여일자", "이동거리", "사용시간"]) 정규식·와일드카드 등과 함께 쓰기 편리

3. 하나의 열(대여일자)에 조건을 걸어 행 필터링

(예: 2021‑06‑01 데이터만 추출)

방법  코드 특징
불린 인덱싱 df[df["대여일자"] == "2021-06-01"] 가장 직관적
.loc + .eq() df.loc[df["대여일자"].eq("2021-06-01")] 메서드 체인이 명확; NaN 안전
.query() df.query('대여일자 == "2021-06-01"') SQL‑like 문법으로 가독성 ↑, 변수 삽입도 쉬움

 

4. 여러 열에 조건을 걸어 행 필터링

(예: “정기권” & “20대” & 이동거리 ≥ 2 km)

방법  코드  특징
불린 인덱싱 & 연산자 df[(df["대여구분코드"]=="정기권") & (df["연령대코드"]=="20대") & (df["이동거리"]>=2000)] 연산자 `& 
.query() df.query('대여구분코드=="정기권" and 연령대코드=="20대" and 이동거리>=2000') 조건이 길어질수록 가독성 강점
.isin() 활용 df[df["대여구분코드"].isin(["정기권"]) & df["연령대코드"].isin(["20대"]) & (df["이동거리"] >= 2000)] 다중 값 매칭 시 깔끔; 다른 열 조건과도 쉽게 조합

 

 

반응형
Comments