프로그래밍 언어/Python

[파이썬 개념 정리 6]Pandas 라이브러리 개념 정리

ourkofe's story 2024. 6. 29. 16:13

이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)


Pandas

  • 표 형태의 데이터를 간편하게 다루고 분석하기 위한 라이브러리 (numpy는 pandas에 비해 가독성이 떨어지고, 정보에 대한 레이블 삽입 불가, 한가지 데이터 타입만 사용 가능하다)
  • numpy를 기반으로 만들어진 대표적인 라이브러리
  • 데이터 분석에서 50% 이상 사용하는 라이브러리
  • 과정
    1. 데이터 불러오기
    2. 데이터 전처리(가공)
    3. 데이터 분석
    4. 데이터 시각화
  • pandas 호출
import pandas as pd # pandas 호출

데이터프레임

데이터 프레임은 여러 개의 시리즈로 구성되어 있다.

가로 줄 - 행 (row) / 세로줄 - 열 (column)

import pandas as pd
import numpy as np

dict_df = pd.DataFrame({
    'category': ['skirt', 'sweater', 'coat', 'jeans'],
    'quantity': [10, 15, 6, 11],                                     
    'price': [30000, 60000, 95000, 35000]
})

데이터프레임 연산

df['quantity'] 
df['quantity'].mean() # 10.5
df['quantity'].sum() # 42
df['quantity'].min() # 6
df['quantity'] * df['price'] # 같은 인덱스끼리 곱해짐

DataFrame을 만드는 다양한 방법

2차원 리스트와 array를 활용한 DataFrame

 

two_dimensional_list = [
    ['skirt', 10, 30000],
    ['sweater', 15, 60000],
    ['coat', 6, 95000],
    ['jeans', 11, 35000]
]
two_dimensional_array = np.array(two_dimensional_list)


list_df = pd.DataFrame(two_dimensional_list)
array_df = pd.DataFrame(two_dimensional_array)
# 위 데이터 프레임은 아래와 같은 결과를 출력
  0 1 2
0 skirt 10 30000
1 sweater 15 60000
2 coat 6 95000
3 jeans 11 35000
# DataFrame을 만들 때 columns라는 옵션을 사용해서 컬럼명을 설정하는 것도 가능하다.
list_df = pd.DataFrame(two_dimensional_list, columns=['category', 'quantity', 'price'])
array_df = pd.DataFrame(two_dimensional_array, columns=['category', 'quantity', 'price']
  category quantity price
0 skirt 10 30000
1 sweater 15 60000
2 coat 6 95000
3 jeans 11 35000

사전을 이용한 DataFrame 만들기

dict_list = [
    {'category': 'skirt', 'quantity': 10, 'price': 30000},
    {'category': 'sweater', 'quantity': 15, 'price': 60000},
    {'category': 'coat', 'quantity': 6, 'price': 95000},
    {'category': 'jeans', 'quantity': 11, 'price': 35000}
]

df4 = pd.DataFrame(my_list)

Pandas로 데이터 불러오기

pd.read_csv를 활용한다.

# csv (Comma-Separated Values) : 값들이 쉼표로 나누어져있다.
import pandas as pd

burger_df = pd.read_csv("data/buger.csv")

#인덱스가 없는 경우
burger_df_2 = pd.read_csv("data/buger2.csv", header=None) # 헤더가 없어 값들이 어떤 종류의 데이터를 가르키는지 알아보기 힘들다 그래서 밑의 코드 활용
burger_df_2 = pd.read_csv("data/buger2.csv". names = [''. '', ''])
burger_df_2 = pd.read_csv("data/buger2.csv". index_col = '') # 이름으로 지정해도 되고 0과 같은 인덱스로도 지정 가능

데이터 탐색하기

데이터프레임명.shape # 데이터의 행과 열을 출력하고 싶을때

데이터프레임명.sort_values(by='', ascending=False) # sort_values() 함수로 원하는 컬럼을 기준으로 내림차순 정렬

데이터프레임명.head() # 기본적으로 앞의 5행을 출력하며 데이터의 앞부분 확인

데이터프레임명.tail() # 데이터의 뒷부분 확인

데이터프레임명.info() # 데이터의 정보를 알고 싶을 때 사용 (행과 열의 수, 컬럼명, 결측치 유무, 데이터의 종류)

데이터프레임명.describe() # 수치형으로 된 정보들이 요약되어 출력

그룹화

카테고리별로 평균 값이 보고싶을 때 활용한다.

burger_df.groupby(['category'])['calories'].mean()
'''
출력결과 :
category
Burger        645.83333
Chicken       350.00000
Name : calories, dtype: float64
'''

값을 정렬하고 싶으면 .sort_values()를 활용한다.

burger_df.groupby(['category'])['calories'].mean().sort_values() # .sort_values()의 기본 설정은 ascending=True (오름차순)
'''
출력결과
category
Chicken       350.00000
Burger        645.83333
Name : calories, dtype: float64
'''

 


데이터의 정렬

sort_values()의 활용

기준이 되는 칼럼을 활용하여 정렬 가능하다.

burger_df(데이터프레임명).sort_values(by='calories(칼럼명)')

DataFrame에서 일부만 선택하기

iloc (integer location)

인덱스를 통해 데이터프레임을 인덱싱하고 슬라이싱하는 것

burger_df.iloc[3 ,1] 
burger_df.iloc[[2, 3], [1, 2]] # 행이 [2, 3]2와 3 열이 [1, 2]1과 2인 밑의 결과 출력
product_name carb protein
Double Whopper 49 48
Double Cheese Whopper 50 52
burger_df.iloc[1:4 , :3] # 행이 1부터 3까지, 열이 0부터 2까지의 데이터 출력

loc (location)

이름을 인덱스로 하여 데이터프레임을 인덱싱하고 슬라이싱하는 것

burger_df.loc['Double Whopper', 'Protein'] # 48
burger_df.loc[['Whopper', 'Double Whopper'], 'Protein']
burger_df.loc[['Whopper', 'Double Whopper'], ['carb', 'protein', 'fat']] # 밑의 결과 출력
product_name carb protein fat
Whopper 49 48 40
Double Whopper 50 52 58
burger_df.loc['Double Whopper':'Bacon King', 'calories':'fat']
product_name calories carb protein fat
Double Whopper 900 49 48 58
Double Cheese Whopper 980 50 52 64
Whopper Junior 310 27 13 18
Bacon King 1150 49 61 79
burger_df.loc['Double Whopper':'Bacon King']
product_name calories carb protein fat soduim category
Double Whopper 900 49 48 58 1.0 Burgers
Double Cheese Whopper 980 50 52 64 1.4 Burgers
Whopper Junior 310 27 13 18 0.4 Burgers
Bacon King 1150 49 61 79 2.2 Burgers

대괄호

burger_df['calories']
burger_df[['calories','fat']]
burger_df['Double Whopper' : 'Bacon King']
product_name calories carb protein fat soduim category
Double Whopper 900 49 48 58 1.0 Burgers
Double Cheese Whopper 980 50 52 64 1.4 Burgers
Whopper Junior 310 27 13 18 0.4 Burgers
Bacon King 1150 49 61 79 2.2 Burgers

DataFrame과 불린 인덱싱

dataframe을 다룰 때 빈번하게 사용되는 인덱싱이다.

burger_df['calories'] < 500 # calories가 500 이하인 제품명에 True를 출력한다
mask = burger_df['calories'] < 500 # 칼로리가 500이하인 제품의 인덱스를 mask라는 변수에 지정한다.
burger_df[mask] # 칼로리 500이하의 제품들의 데이터프레임 출력 (모든 종류의 칼럼 데이터도 함께)
burger_df[mask][['calories','protein']] # 칼로리 500이하의 제품들의 calories와 protein의 값만 담긴 데이터프레임 출력
burger_df.loc[burger_df['calories'] < 500][['calories','protein']] # 위와 동일한 코드
burger_df.loc[burger_df['calories'] < 500,['calories','protein']] # 칼로리 500이하의 제품들의 calories와 protein 칼럼의 데이터프레임 출력
burger_df.loc[burger_df['calories'] < 500,'calories':'fat'] # 칼로리 500이하의 제품들의 calories부터 fat까지의 칼럼의 데이터프레임 출력

데이터 수정 및 추가하기

결측치 확인

burger_df.info() 결측치 유무와 개수 대략적으로 파악

특정 행의 데이터를 바꾸고 싶을 때

burger_df.loc['Double Stacker King', 'sodium'] = 1.9 # nan값에 1.9라는 값 입력
burger_df.loc['Cheeseburger'] = [360, 24, 18, 21, 0.7, 'Burger'] # 행 데이터 변경

특정 열의 데이터를 바꾸고 싶을 때

burger_df.loc['sodium'] = 1 # soduim 칼럼의 데이터를 모두 1로 변경
burger_df.loc['sodium'] = [1.4, 1.3, 2.6, 3.7, 1.0, 2.3, 5.3, 6.4, 3.2, 2.1] # soduim 칼럼의 데이터를 직접 입력하여 변경

현재 데이터에 없는 값을 추가하고 싶을 때

burger_df.loc['Triple Whopper'] = [1130, 49, 67, 75, 1.1, 'Burger'] # 행 데이터 추가

특정 열에 데이터를 일괄 적용하고 싶을 때

burger_df['brand'] = 'Burger King' # brand 칼럼을 새로 만들어 Burger King이라는 데이터를 모두 입력되게 한다.

특정 조건에 따라 새로운 열을 생성할 때

예를 들어 high_calories라는 새로운 열을 생성하는데 조건에 따라서 값을 다르게 입력받게 한다.

# data.loc[조건, 새로운 열 이름] = 넣을 데이터
burger_df.loc[burger_df['calories'] >= 500], 'high_calories'] = True # 칼로리가 500이상으로 고칼로리라면 True 출력
burger_df.loc[burger_df['calories'] < 500], 'high_calories'] = False # 칼로리가 500이상으로 고칼로리라면 False 출력

pandas에서 그래프 그리기

데이터프레임명.plot()
plt.show()

데이터프레임명.plot(x='quarter', y='revenue')
plt.show()

# bar형 그래프 그리기
데이터프레임명.plot(x='quarter', y='revenue', kind='bar') # 바형 그래프 그리기
plt.show()

#원 그래프, 파이차트
데이터프레임명.plot(y='revenue', kind='pie', labels=['1Q', '2Q', '3Q', '4Q']) # 원형 차트 그리기
plt.show()

데이터프레임명.plot(x='fat', y='calories', kind='scatter') # 산점도 그래프 작성
plt.show()

이번 글에서는 pandas / 데이터프레임 만들기 및 연산  / 데이터 불러오기 / 데이터 탐색하기 / 데이터 일부 선택 / 불린 인덱싱 / 데이터 수정 및 추가하기 / 그래프 그리기가 포함된 내용을 정리했으며, 파이썬을 통해 코드를 작성하는 경우에 모두 필수적인 개념들로 꼭 잊지 말고 알아가야 하는 내용인 것 같습니다.

글 읽어주셔서 감사합니다.


출처 및 참고자료 : 코드잇 사이트 강의 '데이터 사이언스 Toolkit' https://www.codeit.kr/topics/data-science-toolkit

728x90