WjExplor Story

DataFrame 데이터 불러오기 & 데이터 일부만 선택하기 본문

Python/Python : Jupyter

DataFrame 데이터 불러오기 & 데이터 일부만 선택하기

더블유제이플로어 2025. 9. 24. 17:19

실제 데이터를 불러와서 사용해 보자.

Pandas를 쓰면 외부 데이터를 간편하게 불러올 수 있다.

. csv 파일 형태를 사용해 보자.

Comma-Separated Values (값들이 쉼표로 나뉘어 있다)

값들이 쉼표로 구분되어 있다는 의미이다.

Buger.csv

쉼표들로 값들이 분리되어 있다.

csv 파일의 첫 줄에는 칼럼 이름이 쉼표로 분리되어 있다.
칼럼 이름이 나와있는 첫 줄을 헤더(header)라고 부른다.

그리고 그다음 줄부터는 실제 데이터가 들어가 있다.

Buger2.csv

헤더가 없는 Buger2.csv 파일도 준비되었다.

파일에 헤더가 있는지 없는지 잘 확인하고 사용해야 한다.


주피터에 csv 파일을 읽어보자

import pandas as pd

buger_df = pd.read_csv("data/burger.csv")
buger_df

csv 파일에 있던 데이터가 DataFrame 형태로 표로 출력된다.
여기서 주목할 점은 csv의 첫 번째 줄이 자동으로 칼럼명으로 인식되었다는 것이다.
칼럼명이 있는 줄을 주로 헤더라고 부르는데 헤더를 명시하지 않아도 Pandas에서 자동으로 인식한 것이다.
헤더가 없는. csv 파일인 경우에는 어떻게 될까?

엉뚱한 값들이 칼럼 이름으로 들어가게 된다.

데이터 첫 줄이 헤더로 인식되어서 Whopper, 600, 등이 칼럼명으로 들어가게 된다.

이런 경우에는 헤더가 없다고 따로 명시해주어야 한다.

buger_df = pd.read_csv("data/burger2.csv", header=None)
buger_df

헤더는 0 , 1 , 2 , 3.. 이렇게 나온다.

헤더에 이름이 없으니 어떤 걸 나타내는지 알기 어렵다. 헤더의 이름을 정해주어야 한다.

데이터를 불러올때 name 파라미터를 써보자.

name=[칼럼명]을 넣어주면 된다.

buger_df = pd.read_csv("data/burger2.csv", header=None,
                      names=["product_name","calories","carb","protein","fat","sodium","category"])
buger_df

name에서 작성한 리스트랑 칼럼의 수는 정확히 일치해야 한다.


마지막으로 왼쪽에 0 , 1 , 2 ,.. 숫자들은 각 로우의 인덱스이다.

여기 있는 인덱스들이 각 로우의 이름이다.
기본적으로는 0 , 1, 2 , 이렇게 숫자로 나와있는데 설정을 하면 이름으로 변경할 수 있다.

예를 들어 상품의 이름을 인덱스로 사용할 수 있다.

index_col에 칼럼 명을 넣으면 된다.

buger_df = pd.read_csv("data/burger2.csv", header=None,
                      names=["product_name","calories","carb","protein","fat","sodium","category"],
                      index_col="product_name")
buger_df

참고로 인덱스는 절대로 겹치면 안 된다.
겹치는 인덱스가 있다면 오류가 나올 것이다.
그래서 절대로 겹칠 수 없는 칼럼을 인덱스 칼럼으로 사용해야 한다.
불가능하다면 기존처럼 0,1,2,3 이런 숫자 인덱스를 사용해야 한다.

작은 팁으로는 방금 전에 index_col에 칼럼 이름을 넘겨줬는데
지금처럼 가장 왼쪽에 있는 칼럼을 쓰고 싶다면 

index_col = 0 

으로 작성해도 똑같이 동작한다.


DataFrame에서 일부만 선택하기

iloc 방법과 loc 방법이 있다.
loc는 location, 위치(칼럼이나 로우 이름)를 통해서 데이터를 받아온다.
iloc 은 integer location. 정수값의 인덱스를 통해서 데이터를 받아온다.

iloc 은 python list와 numpy array에서 하던 인덱싱이랑 비슷하다.

buger_df.iloc[3,1]

buger_df.iloc[[2,3],[1,2]]

buger_df.iloc[[2,3], [1,2]] 는 로우 2랑 로우 3을 받아서 칼럼 1과 칼럼 2를 보여주는 것이다.

데이터 슬라이싱도 가능하다

burger_df.iloc[1:4,:3]

burger_df.iloc [1:4,:3]는 로우 1~3까지 칼럼은 2번째 까지 데이터를 받아온다.

Python list 나 Numpy arrayt에서 슬라이싱 하는 거와 개념적으로 동일하다.

burger_df.iloc[1:4,:]

칼럼을 : (전체)로 받아오면 전체 칼럼으로 데이터 슬라이싱이 된다.

: 을 지워도 동일하게 나온다.

burger_df.iloc[1:4]


loc으로 데이터 슬라이싱을 진행해 보자.

iloc 은 정수로 인덱싱을 하는 거라면 loc 은 이름을 통해서 데이터를 받아오는 것이다.

burger_df.loc['Double Whopper', 'protein']

이름만 잘 정했다면 훨씬 편리하다. 각 값이 몇 번째 위치인지 확인할 필요 없이 더 직관적인 이름들로 데이터를 받아 올 수 있기 때문이다.

iloc에서 했던 거처럼  한 번에 여러 로우나 여러 칼럼의 데이터를 받아 올 수 있다.

burger_df.loc[['Whopper','Double Whopper'],['protein']]

burger_df.loc[['Whopper','Double Whopper'],['carb','protein','fat']]

iloc과 비슷한데 숫자 대신 이름을 쓰는 것만 달라진 것이다.

이름으로 슬라이싱이 가능하다

burger_df.loc['Double Whopper':'Bacon King','carb':'fat']

iloc 은 칼럼 마지막 값을 포함하지 않았으나

예시적으로 burger_df.iloc [1:2,0:3] 이면 칼럼은 0부터 2까지 데이터를 슬라이싱 했었으나

loc에서 슬라이싱 하면 마지막 칼럼 값도 포함이 된다.

만약 여기서 모든 칼럼을 다 받아오고 싶으면 그냥 칼럼만 쓰거나 (:) 뒷부분 생략해 주면 된다.


iloc , loc 둘 다 안 쓰고 사용해 보자.

burger_df['calories']

칼럼을 통째로 받아 올 수 있다.

대괄호 안에 ([ ]) List를 넣어서 데이터를 불러오면

burger_df[['calories','fat']]

한 번에 여러 칼럼을 받아 올 수 있습니다.

헷갈리는 부분이 있다.

한 번에 여러 칼럼에서도 슬라이싱을 할 수 있는데 

burger_df['calories':'fat']

실행하면 오류가 나온다. loc 이나 iloc 없이 바로 대괄호를 쓰면 칼럼을 받아올 수 있으나

슬라이싱은 칼럼이 아니라 로우에서만 된다.

burger_df['Double Whopper':'Bacon King']

loc 이나 iloc 에서는 로우와 컬럼을 쓰게되는 위치가 명확한데 loc 이나 iloc 을 쓰지 않고 바로 대괄호를 쓰게 되면 위치가 애매하다. 그래도 바로 대괄호를 사용하고 싶을 수 있어서 이렇게도 할 수 있음을 보여주었다.


정리

Pandas DataFrame 에서 데이터를 원하는 일부분만 선택하는 방법을 배웠는데 크게 3가지가 있다.

  1. iloc 쓰는 방식
  2. loc 쓰는 방식 
  3. 바로 대괄호를 쓰는 방식 

 

'Python > Python : Jupyter' 카테고리의 다른 글

DataFrame 데이터 수정 및 추가하기  (1) 2025.09.25
DataFrame 과 불린 인덱싱  (0) 2025.09.24
Pandas 와 DataFrame  (1) 2025.09.24
그래프에 한글로 된 텍스트 넣기  (0) 2025.09.24
연봉 데이터 시각화_Jupyter  (0) 2025.09.23