Pandas, 어렵지 않게 시작하기 2 - Dataframe

2021. 9. 15. 16:13ETC/ML & DL

반응형

안녕하세요 !

이 포스팅은 지난 포스팅인 Pandas, 어렵지 않게 시작하기 1 - Series의 2편입니다.

이번엔 Pandas의 자료구조 중 하나인 Dataframe을 알아보도록 하겠습니다 👊🏻

 

모든 코드는 Colab Link를 통해 확인할 수 있습니다.

 

 

***************** INDEX *****************

 

🐼 pandas?

📖 Series

📊 DataFrame

📚 Stacking

📌 Pivoting

 

********************************************

 

들어가기 전, Pandas를 잠깐 다시 볼게요.

Pandas는 데이터 조작 및 분석을 위해 python 프로그래밍 언어로 작성된 소프트웨어 라이브러리로,

특히 시계열이나 테이블을 조작하기 위한 데이터 구조와 연산을 제공하는 라이브러리로 소개해드렸어요.

 

자료구조 중 Series는 1차원 배열, Dataframe은 2차원 배열의 구조입니다.

Series는 Python Dictionary의 구조와 비슷했고, Dataframe은 Table의 형식과 비슷합니다.

 


📊 Dataframe ? 

Pandas의 Dataframe은 여러 개의 시리즈(series)들이 모여서 데이터프레임을 이루는 구조입니다.

2차원 배열이며, 대표적 통계 패키지인 R의 데이터프레임에서 유래하였습니다.

Dataframe structure

 

그림에서 보이는 것처럼 테이블과 동일하게 볼 수 있습니다.

X 축을 Column, Y 축을 Index로 칭합니다.

 

이 때, 여러 개의 Series가 모여 Dataframe을 이룬다고 했는데요,

Columns 👉🏻 ( col 1, col2, col3 ) 가 각각 Series가 됩니다.

 

 

Dataframe 구조

먼저, Dataframe Class는 아래와 같이 선언되어 있습니다.

파라미터를 정리해봅시다!

 

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

# Two-dimensional, size-mutable, potentially heterogeneous tabular data.

 

 

✔️ data. ndarray (structured or homogeneous), Iterable, dict, or DataFrame.

👉🏻Dict can contain Series, arrays, constants, dataclass or list-like objects. If data is a dict, column order follows insertion-order. Changed in version 0.25.0: If data is a list of dicts, column order follows insertion-order.

 

✔️ index Index or array-like

Index to use for resulting frame. Will default to RangeIndex if no indexing information part of input data and no index provided.

 

✔️ columns Index or array-like

Column labels to use for resulting frame when data does not have them, defaulting to RangeIndex(0, 1, 2, …, n). If data contains column labels, will perform column selection instead.

 

✔️ dtype dtype, default None

Data type to force. Only a single dtype is allowed. If None, infer.

 

✔️ copy bool or None, default None

Copy data from inputs. For dict data, the default of None behaves like copy=True. For DataFrame or 2d ndarray input, the default of None behaves like copy=False.

 

 

 

Dataframe 생성

Dataframe을 생성하는 방법은 다양한데요.

예시를 통해 알아보도록 하겠습니다.

dataframe 형식에 맞춘 데이터
Dictionary List로 생성
Series로 생성
numpy array로 생성

위의 방식 등으로 생성할 수 있습니다.

위의 옵션을 추가하여 생성할수도 있겠죠.

 

 

✔️ 빈 데이터는 ?

데이터가 비어있다면 어떻게 될까요?

왼쪽과 같이NaN으로 표시됩니다.

NaN은 Not a Number이라는 의미로, 숫자가 아님을 의미합니다.

현재 데이터가 숫자긴 하지만, 숫자가 아닐 때에도 NaN이 뜹니다.

한 번 직접 확인해보세요 ~.~

 

 

 

 

이번엔 생성한 Dataframe의 구조를 속성을 통해 확인해보도록 하겠습니다.

 

다양한 속성과 메소드가 정의되어있는데요.

정말 간단히 왼쪽의 예시만 확인해보겠습니다.

더 다양한 속성들은 공식문서를 보면 도움이 되실거에요.

 

 

 

 

 

 

 

Numpy 2d Array VS DataFrame

 

Numpy도 2차원 배열을 생성하는데요.

접근하는 방식이 ['index']의 형식으로 동일합니다.

 

여기에 조금 헷갈릴만한 차이가 있습니다.

Numpy의 2차원 배열은 index로 접근할 때, 행을 반환하게 되고

Pandas의 DataFrame은 index접근할 때, 열을 반환하게 됩니다.

 

 

 

만약, DataFrame의 '행'에 접근하고 싶다면

DataFrame.values[] method를 사용하면 됩니다.

 

 

 

 

 

 

 

🗄 계층적 인덱싱

DataFrame도 Serial과 동일하게 명시적 인덱싱 - loc나 암묵적 인덱싱 - iloc을 지원합니다.

이번에는 추가적인 개념으로 계층적 인덱싱을 알아보겠습니다.

Serial이나, DataFrame에 multi Index를 설정할 수 있습니다.

 

Index의 타입은 굉장히 다양합니다.

그 중 Tuple의 형태로 인덱스를 구성해보았습니다.

 

이 때 red인 데이터만, 혹은 2의 인덱스를 가지는 데이터만꺼내오고 싶으면 어떻게 할까요?

 

 

'red' 인덱스를 가지는 데이터를 가지고 오고 싶다면, 

 왼쪽과 같이 표현할 수 있습니다.

 

더 좋은 방법은 없을까요?

답정너지만,,,ㅎㅎ

이 때 사용할 수 있는 것이 바로 계층적 인덱스입니다.

 

 

Tuple 👉🏻 MultiIndex

 

Pandas.MultiIndex.from_tuples() 를 통해

MultiIndex를 생성해주었습니다.

 

출력된 결과를 보니, 정리가 된 상태를 확인할 수 있습니다.

 

 

 

 

이번에도 'red' 인덱스를 가져와봤습니다.

훨씬 간결하고 직관적입니다.

 

슬라이싱과 마스킹도 가능하니, 더욱 많은 작업을 할 수 있겠죠?

 

 

 

 

대표적으로 Tuple을 통한 MultiIndex를 제작했는데요.

다양한 타입을 변환시킬 수 있습니다.

저는 개념만 전달하고 확장하는 건 독자님들의 자유입니다!

 

 

그럼 DataFrame은 여기서 마무리 짓고 ...

더 필요한 부분이 생기면 계속해서 추가해 나아가겠습니다.

보충할 부분이나 수정사항이 있다면 댓글로 남겨주시면 감사하겠습니다 🙌🏻

반응형

'ETC > ML & DL' 카테고리의 다른 글

Deep Neural Networks, 딥러닝  (0) 2021.11.17
Logistic Regression  (0) 2021.11.05
Linear Regression  (0) 2021.11.04
DeepSORT, 제대로 이해하기  (4) 2021.10.08
Pandas, 어렵지 않게 시작하기 1 - Series  (0) 2021.09.08