Data Cleaning & Analysis for Machine Learning with Pandas(1)

newing·2022년 1월 9일
0

ML-pandas

목록 보기
2/3
post-thumbnail

판다스는 형식이나 속성이 일정하지 않은 서로 다른 데이터들(csv, xlsx, json 등)을 컴퓨터가 이해할 수 있는 동일한 형식을 갖는 구조로 통합하기 위해 사용자에게 구조화된 데이터 형식을 제공한다.

판다스의 데이터는 즉, 서로 다른 형식의 데이터를 배열 형태로 저장하는 서비스를 제공한다는 것이다.

시리즈: 1차원 배열
데이터프레임: 2차원 배열

  1. 시리즈

시리즈는 주소(index)에 값을 매핑시키는 형태로 데이터를 저장하고 가공에 활용할 수 있다.
Key와 Value로 이루어져 있다는 점에서 파이썬 Dictionary와 비슷한 구조를 갖는다고 할 수 있다.

시리즈 만들기

 pandas.Series(Dictionary) #딕셔너리(자료형)-> 시리즈 변환

딕셔너리의 key 값은 index에 해당하고 value 값은 그대로 해당 index에 대한 value 형태로 저장된다.

  • 인덱스의 구조

만약 위의 예시와 같이 딕셔너리를 Series를 함수의 인자로 하면 0~N까지의 인덱스 주소 값이 별도로 출력되지 않지만, 리스트를 인자로 하면 0~N까지의 인덱스 주소 값이 출력된다.
인덱스는 짝을 이루는 데이터 값의 순서와 주소를 저장한다.

시리즈 클래스의 인덱스 속성을 이용하여 인덱스 배열을 따로 지정할 수 있다.

SeriesObject.index #인덱스 배열
SeriesObject.values #데이터 값 배열

이를 이용하여 예시를 하나 들어보면 다음과 같다.

#-*- coding: utf-8 -*-
import pandas as pd

dictionary_Parameter= {'A': 1, 'B': 2, 'C': 0} #키와 값으로 이루어진 dictionary
list_Parameter= [1, 'newing', '2022-01-09', True] #Element로만 이루어진 list

sr1= pd.Series(dictionary_Parameter)
sr2= pd.Series(list_Parameter)

print(sr1)
print("\n")
print(sr2)

-----출력값-----
A    1
B    2
C    0
dtype: int64


0             1
1        newing
2    2022-01-09
3          True
dtype: object

또한 시리즈의 index 속성이나 values 속성을 이용하여 위의 시리즈의 배열 값과 데이터 값을 불러오면 다음과 같다.

idx1_1= sr1.index       #시리즈화와 동시에 인덱스나
idx1_2= sr1.values      #데이터값을 불러오면 오류가 뜬다
idx2_1= sr2.index       #ex) pd.Series.index(dictionary_Parameter)
idx2_2= sr2.values      #와 같이 코드를 실행하면 에러가 뜸

print(idx1_1)
print(idx1_2)
print("\n")
print(idx2_1)
print(idx2_2)
-----출력값-----
Index(['A', 'B', 'C'], dtype='object')
[1 2 0]


RangeIndex(start=0, stop=4, step=1)
[1 'newing' '2022-01-09' True]

보이는 바와 같이
딕셔너리를 Series의 인자로 넣으면 인덱스는 index객체로 표현이 되고
리스트를 Series의 인자로 넣으면 인덱스는 RangeIndex(주소 값의 순서배열)의 객체로 표현된다.

  • 주솟 값을 통한 원소의 선택

Pandas는 파이썬의 list slicing과 같은 기법을 통해 인덱스의 범위를 지정하여 값이나 값들을 특정하는 방법도 제공하고 있다.

정수형 위치 인덱스: 대괄호 안에 위치를 나타내는 숫자를 입력
인덱스 이름(label): 대괄호 안에 '이름' or "이름" 입력

Series() 함수를 사용하여 tuple 자료형을 시리즈로 변환하면 값의 나열이라는 점에서 리스트와 같이 정수형 위치 인덱스가 자동 지정된다.

하지만 리스트 또는 투플을 시리즈를 만들 때, 정수형 위치 인덱스 대신 인덱스 이름(label)을 따로 지정할 수 있는 방법이 있다. 아래와 같이 Series() 함수에 index라는 기본 매개변수를 대입해주면 시리즈로 변환할 투플 또는 리스트의 데이터 개수와 순서에 맞춰 인덱스 이름을 리스트 형태로 전달할 수 있다.

#-*- coding: utf-8 -*-
import pandas as pd

list= ['newing', '응애', True, 1]
sr= pd.Series(list, index=['이름', '직업', '이쁘냐?', '뻥이냐?'])
print(sr)
-----출력값-----
이름      newing
직업          응애
이쁘냐?      True
뻥이냐?         1
dtype: object

정수형 위치 인덱싱으로 생성된 시리즈에 인덱스 이름을 부여했으므로 두 가지 인덱스 종류를 이용하여 원소를 탐색할 수 있는데, 이는 다음과 같다.

print(sr[0])
print(sr[[1,2]])
print(sr['이름'])
print(sr[['이쁘냐', '뻥이냐?']])
-----출력값-----
newing
직업        응애
이쁘냐?    True
dtype: object
newing

또한 리스트 처럼 인덱스 slicing을 이용해 원소를 탐색할 수도 있다.

print(sr[0:3])
print("\n")
print(sr['직업': '뻥이냐?'])
-----출력값-----
이름      newing
직업          응애
이쁘냐?      True
dtype: object


직업        응애
이쁘냐?    True
뻥이냐?       1
dtype: object

여기서 간과하지 말아야 할 점은
0:3 = 0,1,2
와 같이 마지막 인덱스를 포함시키지 않는 정수형 위치 인덱스를 이용한 탐색과는 다르게 인덱스 이름(label)로 검색할 때는
"직업":"뻥이냐?" = "직업", "이쁘냐?", "뻥이냐"?
인데, 이는 인덱스 이름(label)로 검색할 때는 마지막 인덱스를 포함함을 의미한다

profile
making milestone for development

0개의 댓글