에이블스쿨 6기 DX 트랙/일일 복습

DAY 08. 데이터프레임 조회

d061120 2024. 9. 20. 01:58
  • 데이터프레임을 대상으로 조회하는 방법은 다양하지만, 
    그 중 한 가지 방법을 선택해 일관되게 사용하는 것이 좋다.

※ 라이브러리 호출: 데이터프레임 작업 시엔 무조건 해준다.

# 라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

 

3.1. 데이터 읽어오기

# 데이터 읽어오기
path = 'csv파일 url'
tip = pd.read_csv(path)

# 확인
# tip[:5]
tip.head()

예시)

※ shape, info(), describe() 등을 활용해 데이터를 잘 불러왔는지 꼭 확인해본다.

 

3.2. 특정 열 조회

  • df.loc[ : , [열 이름1, 열 이름2,...]] 형태로 조회할 열 이름을 리스트로 지정
  • 조회할 열이 하나면 리스트 형태가 아니어도 된다.
  • 열 부분은 생략할 수 있었지만, 행 부분을 생략할 수는 없다.
  • df[[열 이름1, 열 이름2,...]] 형태로 인덱서를 생략하는 것이 일반적
# total_bill 열 조회
tip.loc[:, 'total_bill']
# tip['total_bill']   # 생략하려면 이렇게 쓴다.
---
# 출력
# 0      16.99
# 1      10.34
# 2      21.01
#        ...  
# 241    22.67
# 242    17.82
# 243    18.78
# Name: total_bill, Length: 244, dtype: float64
# 여러 열 조회
tip.loc[:, ['tip', 'total_bill']]
# tip[['tip', 'total_bill']]   # 생략하려면 이렇게 쓴다.

 

3.3. 열 범위 조회

  • 범위 조회는 df.loc[:, 열 이름1:열 이름2] 형태로 조회한다.
  • 범위는 하나만 지정할 수 있어 리스트가 될 수 없으니 대괄호를 사용하지 않는다.
  • 범위 마지막 열도 조회 대상에 포함된다.
  • 범위 검색 시에는 생략을 해서는 안된다.

1) loc: 열 이름으로 조회(인간 친화적 방식)

# sex ~ time 열 조회
tip.loc[:, 'sex':'time'].head()

예시)

 

2) iloc: 열 순서(~번 째 열)로 조회(언어 친화적 방식)

# 2번째 열 ~ 5번째 열 조회
tip.iloc[:, 2:6].head()

예시)

 

※ 행 조회

# 행 조회 #1
tip.loc[0:4, :]

예시)

 

# 행 조회 #2
tip.iloc[0:4, :]

예시)

 

3.4. 조건으로 조회

  • df.loc[조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회할 수 있다.
  • 조건이 제대로 판단이 되는지 확인 후 그 조건을 대괄호 안에 입력

1) 단일 조건 조회

# tip 열 값이 6.0 보다 큰 행 조회
tip.loc[tip['tip'] > 6.0]
# 조건을 변수로 선언해 사용하는 것도 가능
cond = tip['tip'] > 6.0
tip.loc[cond]

 

2) 여러 조건 조회

  • [ ]안에 조건을 여러개 연결할 때 and와 or 대신에 &와 |를 사용한다.
  • 각 조건들은 (조건1) & (조건2) 형태로 괄호로 묶어준다.
# and로 여러 조건 연결 (tip > 6.0 and day == Sat)
tip.loc[(tip['tip'] > 6.0) & (tip['day'] == 'Sat')]
# and로 여러 조건 연결 (tip > 6.0 or day == Sat)
tip.loc[(tip['tip'] > 6.0) | (tip['day'] == 'Sat')]

 

3) 편리한 isin(), between() 메서드

  • isin([값1, 값2,..., 값n]): 값1 또는 값2 또는...값n인 데이터만 조회
# 값 나열 (day가 Sat 또는 Sun)
tip.loc[tip['day'].isin(['Sat', 'Sun'])]
# 위 구문은 다음과 같은 의미이다. (or 조건)
tip.loc[(tip['day'] == 'Sat') | (tip['day'] == 'Sun')]

 

  • between(값1, 값2): 값1 ~ 값2까지 범위안의 데이터만 조회
# 범위 지정 ( 1 <= size <= 3)
tip.loc[tip['size'].between(1, 3)]
# 위 구문은 다음과 같은 의미이다. (and 조건)
tip.loc[(tip['size'] >= 1) & (tip['size'] <= 3)]

 

4) 조건을 만족하는 행의 일부 열 조회

  • df.loc[조건, ['열 이름1', '열 이름2',...]] 형태로 조회할 열을 리스트로 지정
# 조건에 맞는 하나의 열 조회
tip.loc[tip['size'] >= 5, ['tip']]
# 조건에 맞는 여러 열 조회
tip.loc[tip['size'] >= 5, ['total_bill', 'tip', 'size']]

 

3.5. 인덱스 초기화

  • 다음과 같은 경우 인덱스 초기화가 필요하다.
    • 기존 데이터프레임에서 일부 행을 가져와 새로 만든 데이터프레임
    • 일부 행이 지워진 데이터프레임
  • 특히 0부터 시작하는 정수형 인덱스의 경우 초기화를 하는 것이 좋다.
  • 깔끔한 데이터가 사용하기 좋은 데이터

 

  • reset_index() 메서드로 인덱스 초기화
  • 기존 인덱스 값은 의미가 없으므로 drop=True 옵션을 지정해 제거
  • inplace=True 옵션을 지정하지 않으면 실제 반영되지 않는다.
# tip 열이 6 이상인 행 축출
good = tip.loc[tip['tip'] >= 6, :]

# 인덱스 초기화
good = good.reset_index(drop=True)
# good.reset_index(drop=True, inplace=True)

# 확인
good

'에이블스쿨 6기 DX 트랙 > 일일 복습' 카테고리의 다른 글

성능 평가  (0) 2024.10.17
데이터 분석 - 이변량: 범주 vs 숫자  (0) 2024.10.04
DAY 07. 데이터프레임 탐색  (0) 2024.09.18
DAY 07. 데이터프레임 생성  (3) 2024.09.18
DAY 07. 넘파이 기초  (1) 2024.09.18