본문 바로가기
Python/Pandas

[파이썬 Pandas] 1. 데이터의 자료구조

by Delants 2022. 8. 2.

# 본 내용은 " [나도코딩] - 파이썬 활용편(5) 데이터분석 및 시각화 " 강의를 듣고, 복습하고 공부한 내용을 다루었습니다.

 

기존에도 판다스와 관련된 내용을 업로드한 바 있었으나, 정확히 어떤 쓰임인지 잘 알지 못했고 일부 이해가 안되는 부분이 있어, Pandas에 대한 공부가 추가로 필요하다고 판단되었습니다.

그래서 인프런에서 파이썬 데이터 분석 강의를 찾아보았고, 기초강의로 적합하다고 생각되는 [나도코딩]이라는 강사의 파이썬 무료 강의 활용편5 - 데이터분석 및 시각화라는 강의로 공부를 해 보기로 결심하였습니다.

해당 강좌는 유튜브에서도 시청하실 수 있습니다.

한 강좌당 10~15분 내외로 짧은 편이지만 말의 속도가 빠른 편입니다. 그래서 0.8배속정도 해서 시청하고, 일시정지해서  코드를 작성하고 해석하고, 이해하는 연습을 진행했기에, 실제로는 1강좌당 30분정도 걸린 것 같습니다. 하지만 설명을 알차게 잘 해주시고, 예시를 풍부하게 드시기 때문에 확실하게 잡고 가려면 이만한 강의가 없겠다고 생각했습니다. 마지막으로, 해당 강의를 바탕으로 공부한 내용들을 바탕으로 블로그에 올려서 정리하는 시간을 가져보고자 이 글을 작성하게 되었습니다.

 

오늘 포스팅할 주제는 다음과 같습니다.

 

Pandas #1. 데이터의 자료구조

01. Series 

02. Data Frame 

03. Index 

 

=> 파이썬 데이터분석에서 사용하는 기본적인 데이터 구조에 대해 파악할 수 있습니다.


01. Series

제일 먼저 학습한 것은 바로 시리즈입니다.

시리즈는, 영어로 Series라고 부르며, 정수, 실수, 문자열의 1차원 데이터를 말합니다.

 

임의의 온도 데이터를 만들고, pandas함수에 속해있는 Series함수를 사용해서 데이터를 Series형태로 출력한 모습입니다.

 

pandas라이브러리를 주피터 노트북에 적용시키고, 편의상 pd로 부르기로 합니다.

 

 

 

 

 

 

 

 

 

뭔가 정돈된것처럼 보이지만, 데이터프레임과는 다른 형태입니다. 표 형식이 아닌, 일반적인 데이터 표시 형식이지요.

즉, 1차원이라는 것입니다.

 

데이터를 보면 이러한 생각이 드실 수 있습니다.

 

 

앞에 0,1,2,3을 좀 다르게 표현할 수 있는 방법이 없을까?

물론 가능합니다.

인덱스를 임의로 지정하는 index속성을 사용한다면 말이지요.

기본값으로 0,1,2,3,4....인덱스가 주어지지만 

위 사진처럼 인덱스 인자를 추가한다면 (index=['jan','feb','mar',apr'])

인덱스 위치에 0,1,2,3이 아닌, jan, feb, mar, apr이라는 문자가 들어갔습니다.

 

특정 월에 대해 추출하고 싶다면

이렇게 인덱스값을 적어주면 해당 월에 대한 값이 출력됩니다.

temp[1]을 해야 1월에 대한 온도가 출력되지 않을까?라는 생각을 해봤는데, index값은 기본적으로 0으로 시작하기 때문에 인덱스값에서 1을 빼줘야 내가 원하는 값을 출력할 수 있습니다.

 

지금부터는 6월에 대한 기온을 보겠습니다.

왜 6월이냐고 할 수 있겠지만, 존재하지 않는 데이터를 적었을 경우에는 어떤 일이 발생할지 확인해보기 위함입니다.

물론 당연히 에러가 발생합니다. 

june이라는 데이터가 존재하지 않으므로 에러 발생.

 

특정 행에 대한 연산도 할 수 있습니다.

 


02. Data Frame

두 번째로 데이터 프레임입니다.

데이터 프레임은 시리즈의 모음으로, 2차원의 데이터를 의미합니다.

 

2-1. 데이터 준비

먼저 데이터를 준비해 보았습니다.

해당 강좌의 내용대로, 슬램덩크 주요인물 8명에 대한 데이터를 담아, 사전(dictionary)형태로 만들었습니다.

여기서 사전 형태란 중괄호를 사용하며, {'Key' : [Value]}형태로 정의된 것입니다.

타입은 사전형태인것을 확인하실 수 있습니다.

 

 

2-2. 데이터프레임 객체 생성

이제 본격적으로 데이터프레임을 생성해 보겠습니다.

pandas를 임포트해 주고, 데이터 프레임 이름 = pd.DataFrame(데이터셋이름)과 같은 형식으로 코드를 입력해줍니다.

아까 보았던 시리즈 형태와 구분이 되시나요? 시리즈형태는 1차원 데이터이고, 데이터 프레임은 2차원 데이터입니다.

보기 쉽게 표 형식으로 나타낸 것을 확인할 수 있습니다.

 

이렇게 데이터 프레임형태로 나타내면, 데이터 접근이 용이해집니다.

칼럼의 이름으로 여러 데이터를 검색하고, 필터링을 더욱 쉽게 할 수 있다는 것입니다.

 

2-3. 데이터셋 접근

이제 해당 데이터셋에 접근을 해 보겠습니다.

이름만 보고싶을때 df['이름']코드를 사용하면 이름만 볼 수 있습니다.

이 경우, 데이터셋['칼럼명'] 형식으로 입력하면 됩니다.

즉, 리스트 형태로 감싸주는 형태입니다.

 

 

 

 

 

 

그렇다면 2개 이상의 칼럼을 보고싶을때는 어떻게 해야할까요?

예를들어 이름과 키를 확인하고 싶을 경우가 이 경우겠습니다.

바로 대괄호 두개로 감싸준 형태로 작성해야 합니다.

대괄호 하나로 감싸주는 것은 필터링할 데이터가 1개일 경우 사용하지만, 2개이상일 경우에는 리스트로 한번 더 묶어주어야 합니다.

 

2-4. 데이터 프레임 객체 생성 (index지정)

이제는 데이터 프레임에 인덱스를 지정해 보겠습니다.

index라 하면, 데이터에 접근할 수 있는 주소 값을 뜻합니다. 인덱스는 나중에 좀 더 자세히 알아보도록 하겠습니다.

 

데이터 프레임에 인덱스를 지정할 때 주의할 점은 

꼭!! 인덱스 개수와 행의 수를 맞춰줘야 한다는 것입니다.

예를 들어 행의 개수가 10개면 인덱스도 10개로 지정해 주어야 합니다.

위 데이터에서는 8개의 행으로 구성되어 있으므로, 인덱스도 8개로 지정해 줍니다.

pd.DataFrame(사용할 데이터셋, index=['사용할 인덱스명'])함수 중 index속성으로 인덱스를 지정할 수 있습니다.

 

2-5. 데이터 프레임 객체 생성 (Column지정)

자신이 원하는 데이터 칼럼만 보고싶을 경우에는 칼럼 인덱스 이름으로 검색할 수 있습니다.

데이터 중 자신이 원하는 칼럼만 선택하거나, 순서도 변경할 수 있습니다.

예를 들어 자신이 이름, 학교, 키에 대한 정보만 보고싶다면

데이터프레임 인자로 columns=['이름', '학교', '키']를 입력하여 원하는 정보를 출력할 수 있습니다.

또한 원 데이터와 다르게, 표시하고자 하는 칼럼의 순서도 변경할 수 있습니다.


03. index
데이터에 접근할 수 있는 주소 값

이제는 인덱스에 대해 확인해 보겠습니다.

앞서 인덱스라고 몇번 소개해 드렸는데, 이제 본격적으로 알아보겠습니다.

인덱스는 데이터에 접근할 수 있는 주소 값입니다.

집에도 주소가 있듯, 데이터에도 주소가 있습니다. 그 주소가 바로 인덱스입니다. 

 

3-1. 인덱스 이름 설정하기

만약 지원번호라는 인덱스의 이름을 설정하고 싶다면,

데이터셋.index.name = '사용할 이름' 형식으로 코드를 작성해 주세요.

본문에서는 '지원번호'라는 이름을 사용해서 적었습니다.

3-2. 인덱스 초기화하기

인덱스를 작성했는데, 마음에 들지 않아 지우고 싶다면 초기화를 해야합니다.

초기화를 할 때는 reset_index()함수를 사용하여 진행하지만, 이름을 설정할때와 다르게 속성을 하나 추가해줘야 합니다.

바로, drop=True인자입니다. 만약 해당 속성을 추가하지 않고 진행한다면

위 사진처럼 인덱스가 일반 칼럼으로 바뀌어버립니다. 즉 인덱스가 삭제되지 않았습니다. 

완전히 삭제하기 위해서는 drop=True라는 인자를 써서 삭제시켜줘야 합니다.

3-3. 인덱스 실데이터에 반영하기

이렇게 인덱스를 수정했는데, 다시 df(df는 데이터셋 이름)를 쳐보면

반영되지 않은 모습을 확인할 수 있습니다.

그런데 실 데이터에 반영을 하고 싶을 경우에는 inplace인자를 사용하여 실 데이터에도 반영될 수 있게 합니다.

 

3-4. 지정한 칼럼으로 인덱스를 설정하기

존재하는 칼럼을 이용해 인덱스를 설정해 보겠습니다.

이 경우에는 인덱스로 사용할 칼럼 이름을 먼저 적고, 실데이터에 반영을 할려는 인자(inplace)를 적습니다.

만약, 실데이터에 반영하고 싶지 않을 경우, inplace는 생략할 수 있습니다.

3-5. 인덱스 정렬하기

마지막으로 인덱스를 정렬해 보겠습니다.

인덱스 정렬은 매우 자주 쓰이는 구문이므로 숙지하고 있어야 할 것입니다.

바로 sort_index()함수를 사용하는데, 이 함수를 사용하면, 인덱스를 기준으로 기본값으로 오름차순 정렬을 할 수 있습니다.

현 데이터에서는 이름이 인덱스값이므로, 이름을 기준으로 오름차순 정렬이 된 모습을 확인할 수 있습니다.

반대로 내림차순 정렬을 하고 싶다면 sort_index()함수의 인자로 ascending=False(오름차순 거짓)를 기입합니다.


이렇게 오늘은 자료구조에 대해 알아보았습니다.

최대한 압축해서 적으려 했는데 쓰다보니 양이 많아졌네요.

다음에는 좀 핵심적인 내용 위주로 복습해보겠습니다.

 

다음 학습 내용 (pandas #2)
04. 파일저장 및 열기

 

감사합니다.

댓글