[Python.Pandas] Pandas 기본 - DataFrame, Series, Index의 이해

2020. 12. 15. 05:00Python과 머신러닝/Pandas 데이터 분석

1. 판다스란?

  • 판다스란 구조화된 데이터의 처리를 지원하는 python 라이브러리이다.
  • Python 계의 엑셀이라고 표현하면 가장 정확한 표현이라고 생각한다.
  • NumPy와 통합하여 강력한 스프레드시트 처리 기능을 제공하는 라이브러리이다.

 

2. 용어 정리

사진 출처 : https://www.w3resource.com/python-exercises/pandas/index.php

  • DataFrame : 전체 데이터를 데이터 프레임이라고 칭한다.
  • Series : 하나의 Column을 Series라고 한다.
    • Series란 Column vector 하나를 표현하는 object이다.
    • list 형태로 데이터를 담아줄 수 있는 특징이 있다.
    • NumPy의 List는 값만 출력이 된다면, Series는 자동으로 index도 함께 출력된다.
    • 즉, Series는 Index/Data/Data type으로 구성된다.
  • Index의 특징
    • 일반적인 Index와 대부분 비슷하지만 몇 가지 다른 점만 정리한다.
    • index는 숫자만 가능하지 않고, String(문자열) 일 수도 있다.
    • index가 숫자여도 순서대로 정렬될 필요가 없다.
    • 그리고 index는 중복될 수 있다.
  • Index에게 기대했던 기본과 다른 특징들이 존재하는데, 그 이유를 예시를 통해 알아보자.

 

3. Index를 지정하지 않을 경우 예제

In [1]:from pandas import Series, DataFrame 
       import pandas as pd 
	   import numpy as np
	   
In [2]:list_data = [1,2,3,4,5]

In [3]:example_obj = Series(data = list_data) 
       example_obj #index를 따로 지정하지 않으면 0-base로 자동 생성된다.
Out[3]:0 1 
       1 2 
       2 3 
       3 4 
       4 5 
       dtype: int64
  • 따로 index를 지정하지 않으면 0-base로 자동 생성된다.

 

4. Index를 지정하는 경우 데이터를 읽는 방법

In [4]:list_name = ['a', 'b', 'c', 'd', 'e'] 
       list_name
Out[4]:['a', 'b', 'c', 'd', 'e']

In [5]:example_obj = Series(data = list_data, index=list_name) 
       example_obj # 지정해준대로 list의 index가 생성되는 것을 확인할 수 있다.
Out[5]:a 1 
       b 2 
       c 3 
       d 4 
       e 5 
       dtype: int64
       
In [6]:example_obj['a'] # 1을 출력하고 싶다면 index로 접근하면 된다
Out[6]:1
  • 위와 같이 배열 형태로 index parameter를 지정해주면, index가 0-base의 숫자가 아닌 문자열로도 지정이 가능한 것을 확인할 수 있다.
  • 데이터를 읽을 때에는, 약간 어색하지만 동일한 string의 index를 사용하여 값을 추출할 수 있다.

 

5. Series의 형변환

In [7]:example_obj_2 = example_obj.astype(float) 
       example_obj_2 # 이렇게 기존 데이터를 형변환할 수 있다.
Out[7]:a 1.0 
       b 2.0 
       c 3.0 
       d 4.0 
       e 5.0 
       dtype: float64

In [8]:example_obj_2['b'] = 3.2 # 새로운 값을 assign할 때도 동일한 방식으로 indexing한다. 
       example_obj_2
Out[8]:a 1.0 
       b 3.2 
       c 3.0 
       d 4.0 
       e 5.0 
       dtype: float64
  • .astype(데이터형) 함수를 사용하면 기존 데이터를 원하는 데이터형으로 변형할 수 있다.
  • 그리고 데이터를 assign하는 것도 string index로 참조하여 원하는 위치에 값을 대입하면 된다.

 

6. Pandas .index와 .values

In [9]:example_obj_2.index # .index property로 해당 Series의 index를 추출하여 볼 수 있다.
Out[9]:Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

In [10]:example_obj_2.values # .values property로 데이터의 값들만 추출하여 볼 수 있다.
Out[10]:array([1. , 3.2, 3. , 4. , 5. ])
  • .index property로 해당 Series의 index를 추출하여 볼 수 있다.
  • .values property로 데이터의 값들만 추출하여 볼 수 있다.

 

7. Dict 데이터를 Pandas Series object로 변환하기

In [11]:dict_data = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5} 
        dict_data
Out[11]:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

In [12]:indices = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 
        indices
Out[12]:['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

In [13]:example_obj_3 = Series(dict_data, index=indices) 
        example_obj_3
Out[13]:a 1.0 
        b 2.0 
        c 3.0 
        d 4.0 
        e 5.0 
        f NaN 
        g NaN 
        h NaN 
        dtype: float64
  • 기존 dict type의 데이터는 index 'a'~'e'만 존재한다.
  • 실제 Series 데이터를 생성할 때 사용된 indices 배열은 'a'~'h'까지 존재한다.
  • 그렇기 때문에 Series object로 변환될 때 'a'~'e'까지는 정상적인 값을 확인하여 대입하지만,
  • 'f'~'h'는 NaN 값을 기본으로 넣어 Series object를 생성한다.

 

8. 관련 포스트

 

[Python.Pandas] DataFrame Series 추출, loc/iloc 이해하기

1. Dict Data를 Pandas로 변환하기 In [1]:from pandas import Series, DataFrame import pandas as pd import numpy as np In [2]:raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 'last_..

coding-grandpa.tistory.com

 

[Python.Pandas] DataFrame / Series 간 Operation 이해

1. Series 간 연산 이해하기 In [1]:import pandas as pd from pandas import Series, DataFrame import numpy as np In [2]:s1 = Series(range(1,6), index= list("abced")) s1 Out[2]:a 1 b 2 c 3 e 4 d 5 dtype..

coding-grandpa.tistory.com

 

[Python.Pandas] Selection과 Drop

1. 원하는 Row만 선택하기 loc과 iloc 원하는 Row만 선택하기 위해서는 지난 포스트에서 정리한 loc과 iloc에 대해서 이해하는 것이 가장 중요하다. 2020/12/16 - [Python과 머신러닝/Pandas 데이터 분석] - [Pyth

coding-grandpa.tistory.com