본문 바로가기

Study doc./Python

[Python] 알고 써라!! 판다스(Pandas)

* 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다.

 

안녕하세요!!

지난번에는 넘파이(Numpy) 패키지에 대해서 공부했습니다.

만약 넘파이에 대해 잘 모르신다면 이전 포스팅을 먼저 읽어보고 오시는 것을 추천드립니다.

 

오늘은 파이썬에서 넘파이와 더불어 정말 많이 사용되는 "판다스(Pandas) 패키지"에 대해서 공부해보겠습니다.

넘파이 패키지가 1차원 배열의 처리를 도왔다면, 판다스 패키지는 2차원 이상의 데이터 처리를 돕는다고 할 수 있습니다.

역시 딱딱한 설명으로는 잘 와닿지가 않죠? 천천히 생각해봅시다.

 

사실 우리는 알게 모르게 판다스를 많이 사용해왔습니다. 

로컬 저장소에 있는 파일을 가져올때, 가져온 데이터를 전처리 할 때(ex. 결측치 처리, 정렬, 타입 변환 등), 전처리한 데이터를 로컬 저장소로 옮길때 등 자연스럽게 판다스 패키지의 내장 함수들을 사용해왔습니다.

만약 판다스 패키지가 없었더라면 데이터를 불러오는것부터 쉽지 않았을 것입니다.

 

이처럼 판다스는 2차원 이상의 데이터, 특히 데이터 프레임 형태의 처리를 도와주는 감사한 녀석입니다.

그럼 판다스 패키지에는 어떤 함수들이 있고, 어떻게 사용하는지 알아볼까요?!!

 

 

 


 

 

 

순서

  1. 판다스 데이터 프레임의 상호 이동
    1. 리스트/ 배열/ 딕셔너리 -> 데이터 프레임
    2. 데이터 프레임 -> 리스트/ 배열/ 딕셔너리
  2. 판다스 데이터 프레임의 수정
    1. 특정값 추출
    2. 특정값 삭제
    3. 순서 정렬
    4. 그룹 묶기

 


 

 

1. 판다스 데이터 프레임의 상호이동

많은 머신러닝 패키지에서 배열을 사용하는 경우가 많기 때문에

'데이터 프레임' 형태와 '리스트/ 배열/ 딕셔너리' 형태 사이 상호 변환을 할 줄 아는게 좋습니다.

어렵지 않으니 바로 시작해 보겠습니다. 

1-1. 리스트/ 배열/ 딕셔너리 -> 데이터 프레임

# 리스트 -> 데이터 프레임
display(pd.DataFrame([[1,2,3],[3,4,5]], columns = ['A','B','C']))

# 배열 -> 데이터 프레임
display(pd.DataFrame(np.array([[1,2,3],[3,4,5]]), columns = ['A','B','C']))

# 딕셔너리 -> 데이터 프레임
display(pd.DataFrame({'A':[1,2,3], 'B':[3,4,5]}))

 

1-2. 데이터 프레임 -> 리스트/ 배열/ 딕셔너리

df = pd.DataFrame({'A':[1,2,3,4,5], 'B':[3,4,5,6,7]})
display(df)

# 데이터 프레임 -> 리스트
display(df.values.tolist())

# 데이터 프레임 -> 배열
display(df.values)

# 데이터 프레임 -> 딕셔너리
display(df.to_dict('list')) # 딕셔너리의 값(value)을 어떤 형태로 받을지

 

 

2. 판다스 데이터 프레임의 수정

2-1. 특정값 추출

넘파이의 배열에서는 특정값을 추출할때 배열 바로 뒤에 대괄호( [ ] )를 사용했습니다.

하지만 데이터 프레임 바로 뒤의 대괄호에는 칼럼을 지정할 수밖에 없습니다 (ex. dataframe['col_name']).

 

그렇다면 데이터 프레임에서 특정값을 어떻게 추출할 수 있을까요?

바로 loc() 와 iloc() 함수를 통해 가능합니다.

위 두 함수의 차이점에 대해서는 [Python] iloc vs loc 포스팅을 참고해주세요.

 

간단하게 정리하자면 인덱스의 순서를 통해 추출하기 위해서는 iloc() 함수를,

컬럼명이나 인덱스 값을 통해 추출하기 위해서는 loc() 함수를 이용한다고 할 수 있습니다.

 

2-2. 특정값 삭제

값 삭제의 경우, 사용하지 않는 컬럼(axis=1)을 삭제하거나 결측치가 많은 행(axis=0)을 제거하는 상황으로 주로 표현됩니다.

display(df)

display(df.drop([2,3], axis=0, inplace=True)) # 인덱스 값이 2와 3인 행을 지운값을 원본값에 저장하겠다
display(df.reset_index(drop=True)) # 기존의 인덱스 값은 버리겠다

 

2-3. 순서 정렬

순서를 정렬하는 경우, 특정 칼럼을 오름차순으로 정렬한 후 카테고리화 하는 상황에 주로 사용됩니다.

# 데이터 프레임 생성
df = pd.DataFrame({'이름':['철수','민수','영희','지영','민성'], '성적':[70,40,50,90,30], '졸업여부':['Y','Y','N','Y','N']})
display(df)

# 성적 순서대로 오름차순 정렬
df.sort_values(by=['성적'], ascending=True, inplace=True) 
display(df)

 

2-4. 그룹 묶기

결측치를 채우는 값으로 그룹별 평균값을 계산하거나, 어떤 카테고리별 평균, 최대, 최소, 최빈값 등을 새로운 열로 추가할 때 많이 사용됩니다. 이때 agg() 함수를 사용하면 새로운 컬럼명을 바로 지정할 수 있습니다.

# 졸업여부에 따른 학생들의 성적 총합
df.groupby('졸업여부')['성적'].sum()

# 졸업여부에 따른 학생들의 평균성적을 새로운 컬럼으로 추가
df.groupby('졸업여부')['성적'].agg([('평균성적','sum')])