일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 조세피난처
- python
- 뉴스타파
- mysql
- 인공지능
- ubuntu
- 블로그
- 해외직구
- 김경문
- 문파문파
- 애플
- NC다이노스
- 야구
- Tizen
- 국정원
- ubuntu 12.04
- 태그를 입력해 주세요.
- arm
- 손민한
- Git
- 리뷰
- 데이터베이스
- 타이젠
- Linux
- 안드로이드
- 우분투
- 문파문파 공략
- NC 다이노스
- 단통법
- 프로야구
Archives
- Today
- Total
꿈꾸는 사람.
Python으로 테이블의 열을 가져오기 본문
반응형
개요
모든 테이블은 가로 행과 세로 열로 구성되며, 각 열의 첫 번째 값으로 해당 열 이름이 명시적으로 쓰여진 공통된 구조가 많다.
이런 테이블을 전문적으로 다루는 패키지가 판다스(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)] | 다중 값 매칭 시 깔끔; 다른 열 조건과도 쉽게 조합 |
반응형
'Python' 카테고리의 다른 글
pandas의 Groupby() 알아보기 (0) | 2025.06.28 |
---|---|
python 패키지 - pandas 개요 (0) | 2024.11.23 |
데이터 전처리에 최빈값 (mode) 적용하기 (0) | 2022.11.21 |
Python::프로야구 팀순위 분석 (2) | 2022.07.19 |
pandas로 표 형식 데이터 읽기 (0) | 2022.07.10 |
Comments