MLOps 부트캠프 by 한경+토스뱅크/Python

pandas와 DataFrame

나니니 2024. 7. 31. 00:52

판다스란?

파이썬에서 데이터 처리를 위해 존재하는 가장 인기 있는 라이브러리

고수준 API 제공

파이썬의 리스트, 컬렉션, 넘파이 등의 내부 데이터 외에도 CSV등의 파일을 쉽게 DataFrame으로 변경해 데이터의 가공/분석을 편리하게 수행할 수 있도록 함

 

핵심 객체 -> DataFrame

DataFrame

: Index를 key값으로 가지며  행x열 로 이뤄진 2차원 데이터를 담은 데이터 구조체, 여러개의 Series로 이뤄져있음

 

eg. DataFrame 생성 - 아래와 같이 딕셔너리를 넣을 수도 있고, 리스트나 NumPy array를 넣을 수도 있음

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

Index

: RDBMS의 PK처럼 개별 데이터를 고유하게 식별하는 key값, 모든 데이터는 생성되는 순간 고유의 Index값을 가지게 됨

Series

: Index를 key값으로 가지고 있으나, 컬럼이 하나인 데이터 구조체

 

  • info(): 총 데이터 수, 데이터 타입, Null 수를 알 수 있음 
  • describe(): 컬럼별 숫자형 데이터값의 n-percentile분포도, 평균값, 최댓값, 최솟값을 알 수 있으며, 오직 숫자형(int, float 등) 컬럼의 분포도만 조사함(*object 타입의 컬럼은 출력에서 제외됨)
  • value_counts(): 해당 컬럼값의 유형 및 건수를 확인할 수 있음, 데이터의 분포도를 확인하는데 유용함
    • dropna=True: Null값을 무시하고 개별 데이터 값의 건수를 계산(*False는 Null값 포함)
  • head(): 전체 데이터 중에서 앞의 특정 수만큼만 데이터를 출력(*인자값이 없을 경우, 자동으로 5행까지 출력)

넘파이 ndarray, 리스트, 딕셔너리 -> DataFrame으로 변환

1) 2차원 리스트와 2차원 NumPy 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부터 시작하는 숫자값이 생성되어 있다. 

DataFrame을 만들 때 columns라는 옵션을 사용해서 컬럼명을 설정할 수 있다. 

list_df = pd.DataFrame(two_dimensional_list, columns=['category', 'quantity', 'price'])
array_df = pd.DataFrame(two_dimensional_array, columns=['category', 'quantity', 'price'])

2) 딕셔너리가 담겨 있는 리스트로 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(dict_list)

DataFrame-> 넘파이 ndarray, 리스트, 딕셔너리로 변환

  • values

컬럼 데이터 세트 생성 및 수정

DataFrame의 컬럼 데이터 세트 생성 및 수정 시, [ ] 연산자를 이용한다. 

titanic_df['Age_0']=0
titanic_df.head(3)

DataFrame 불러오기

pd.read_csv('/data/burger.csv')

 

DataFrame 데이터 삭제

  • drop():

예제1. DataFrame 수정

players_df에 아래 사항들을 모두 반영해 주세요.

1) 해당 시즌에서 아시아 최초 득점왕을 차지한 손흥민(Son Heung-Min) 선수의 데이터를 추가해 주세요.

  • 경기: 35회
  • 경기 시간: 3051분
  • 골: 23골
  • 어시스트: 7회

2) 벤 데이비스(Ben Davies)라는 선수가 참여한 경기 수 정보가 누락되어 있습니다. 결측값을 29로 바꿔 주세요.
3) 선수들이 모두 토트넘 홋스퍼 구단 소속이라는 것을 알 수 있도록 team이라는 컬럼을 새로 만들어서 Tottenham이라는 값을 넣어 주세요.

import pandas as pd

players_df = pd.read_csv('data/tottenham_2122.csv', index_col='name')

players_df.loc['Son Heung-Min'] = [35, 3051, 23, 7] # 손흥민 선수의 데이터에 경기 수, 경기 시간, 골, 어시스트 순으로 값을 채워 넣고 리스트를 할당
players_df.loc['Ben Davies', 'matches'] = 29 # 인덱스는 Ben Davies, 컬럼은 matches에 해당하는 데이터에 29라는 값을 수정
players_df['team'] = 'Tottenham' # team이라는 컬럼을 추가해서 Tottenham이라는 값을 채움

players_df