본문 바로가기
파이썬/데이터 다듬기

[240913] 데이터다듬기#3 - 판다스 데이터프레임 조회

by 황오독 2024. 9. 13.

데이터프레임을 조회하기 위한 방법들

import pandas as pd
import numpy as np
import matplotlib pyplot as plt
import seaborn as sns

- 가장 기본적인 라이브러리 불러오기
- 처음엔 어케 안보고 적나 했는데, 쓰다보니 정말 외워지게 되었다!!
 
1. 특정 열 조회

더보기

df.loc[ 행, 열 ]

열을 조회할 때는 df.loc[:, [열이름1, 열이름2...] 형태로 조회할 열 이름을 지정한다.

보통 행보다는 열을 많이 조회하게 되는데

원래라면 열 부분은 생략할 수 있지만, 행 부분을 생략할 수는 없다.

 

 

하지만 자주 사용하다보니 편의를 위해서 행 부분과 loc를 생략하여 조회할 수 있다.

df[열이름]으로 조회

# total_bill 열 조회
# tip.loc[ 행 , 열 ]
tip.loc[:, 'total_bill']
tip['total_bill'] # 하나의 열을 조회할 땐 이렇게 작성
                  # 하지만 앞의 과정 반복하면서 지워나가는 것이 도움.

 
** 강사님의 꿀팁
  처음부터 틀 세팅
tip.loc[ 행, 열]
② 해당 틀에 실제 행, 열 대입
tip.loc[:, 'total_bill'] 
③ 생략
tip['total_bill']
 
==> 이렇게 하는 연습을 해야 나중에 헷갈리지 않을 수 있다고 알려주셨다.
 
2. 열 범위 조회
- df.loc[:, 열이름:열이름2]
- 특정 열 조회와 달리, 범위를 조회할 때는 생략하지 않는다.

 sex ~ time 열 조회
tip.loc[:, 'sex':'time' ] # 범위 검색을 할 땐 생략 X

 
여기서 헷갈리는 중요한 뽀인트!!
- 데이터프레임 조회시도 당연 인덱스 슬라이싱을 통해 조회할 수 있으나, iloc를 사용해야 한다.
- 그리고 가장 중요한 부분은

더보기

- df.loc[] : 눈에 보이는 인덱스와 열 이름으로 조회 (인간적인 조회)
- df.iloc[] : 눈에 보이지 않는 행과 열의 위치로 조회 (비인간적인 조회)

이게 무슨 말이냐면, 

 
여기서 눈에 보이는 것은 'total_bill', 'tip', 'sex', 'smoker...', '0, 1, 2, 3, 4'
눈에 보이지 않는 것은 열이름 위에 마음속에 저장되어 있는 인덱스 '0, 1, 2, 3, 4' 이다.
 
tip.loc[0:4, :]를 하게 되면 위 데이터 프레임이 전부 보이게 되지만,
 
tip.iloc[0:4,:]를 하게 되면 위 데이터 프레임에서 보이는 0~3까지만 출력하게 된다는 것이다.

더보기

근데 또 범위를 조회할 땐 loc 생략이 안된다..

- 헷갈리니까 무조건 loc,iloc 쓰고
- 열 조회할때만 loc 생략하도록 함..........
- 앵간하면 loc만 쓰기!!!!!!!!

로 강사님과 약속하였음ㅋ.ㅋ

 
3. 조건으로 조회
- df.loc[조건] 형태로 조건에 만족하는 데이터만 조회
- 조건을 대괄호 안에 넣으면됨.

## 단일조건 조회
# tip 열 값이 6.0 보다 큰 행 조회 1
# tip.loc[tip['tip'] > 6.0 , :]
tip.loc[tip['tip'] > 6.0]

# tip 열 값이 6.0 보다 큰 행 조회 2
cond = tip['tip'] > 6.0
print(cond)
tip.loc[cond]


## 여러조건 조회
# and, or 대신에 &, |를 사용해야 한다. 
# 또한 각 조건들은 (조건1) & (조건2) 형태로 괄호로 묶어야 한다.
# 꼼꼼하게 읽지않아서 중간에 오류가 발생했었다.

# or로 여러 조건 연결 (tip > 6.0 or day == Sat)
tip.loc[(tip['tip'] > 6.0) | (tip['day'] == 'Sat')]

 
** 편리한 isin(), between() 메서드
  - isin([값1,값2,,,값n]) : 값 1또는 값2 또는..값n인 데이터만 조회

# 값 나열 (day가 Sat 또는 Sun)
tip.loc[tip['day'].isin(['Sat', 'Sun'])]

  - between(값1, 값2) : 값1 ~ 값2까지 범위안의 데이터만 조회
# isin은 여러개 작성할 수 있으니, 리스트 형태로 작성
# between은 범위가 2개만 설정할 수 있도록 개수가 정해져있으니 리스트X

# 조건에 맞는 여러 열 조회
tip.loc[tip['size'] >= 5, ['total_bill', 'tip', 'size']]