디지털미디어랩 머신러닝 여름캠프

2주차(4) : Pandas 다루기 - Series

참고 자료

Pandas 패키지

  • Pandas 패키지는 데이터 분석을 할 때 가장 많이 쓰이는 패키지 중의 하나이다.
  • 대부분의 데이터는 시계열(series)이나 표(table)의 형태로 나타낼 수 있다.
  • Pandas 패키지에서는 이러한 표 데이터를 다루기 위한 시리즈(Series) 클래스와 데이터프레임(DataFrame) 클래스를 제공한다.

Series

  • 시리즈는 NumPy에서 제공하는 1차원 배열과 비슷하지만 각 데이터의 의미를 표시하는 인덱스(index)를 붙일 수 있다.
  • 데이터를 리스트나 1차원 배열 형식으로 시리즈 타입의 데이터를 만들 수 있다.
  • 인덱스의 길이는 데이터의 길이와 같아야 한다.
  • 다음 예에서 이 "서울", "부산" 등의 문자열이 인덱스의 값이다.
  • 인덱스의 값을 인덱스 라벨(label)이라고도 한다.
  • 인덱스 라벨은 문자열 뿐 아니라 날짜, 시간, 정수 등도 가능하다.
In [ ]:
import pandas as pd

s = pd.Series([9904312, 3448737, 2890451, 2466052], index=["서울", "부산", "인천", "대구"])
print(s)
  • 만약 인덱스를 지정하지 않고 시리즈를 만들면 시리즈의 인덱스는 0부터 시작하는 정수값이 된다.
In [ ]:
s2 = pd.Series([9904312, 3448737, 2890451, 2466052])
print(s2)
  • 시리즈의 인덱스는 index 속성으로 접근할 수 있다.
  • 시리즈의 값은 사실 NumPy의 1차원 배열이며 values 속성으로 접근할 수 있다.
In [ ]:
print(s.index)
print(s.values)
  • 또한 시리즈 데이터는 자체적으로 name이라는 속성을 가질 수 있다.
  • 인덱스도 마찬가지. (index.name)
In [ ]:
print(s.name)
print(s.index.name)
print(s)
In [ ]:
s.name = "인구"
s.index.name ="도시"
print(s)

시리즈 연산

  • 시리즈는 NumPy 배열과 동일하게 벡터화 연산을 할 수 있다.
  • 다만 연산을 해도 인덱스 값은 변하지 않는다.
In [ ]:
s = s / 1000
print(s)
In [ ]:
t = s * 1000
t.name = "인구2"
t.index.name = "도시2"

print(t)

시리즈 인덱싱

  • NumPy 배열에서 가능한 인덱스 방법이외에도 인덱스 라벨을 이용한 인덱싱도 할 수 있다.
  • 배열 인덱싱이나 인덱스 라벨을 이용한 슬라이싱(slicing)도 가능하다.
In [ ]:
print(s[1], s["부산"])
print(s[3], s["대구"])
  • 배열 인덱싱을 하면 자료의 순서를 바꾸거나 특정한 자료만 선택할 수 있다.
In [ ]:
print(s[[0, 1, 3]])
print(s[["서울", "부산", "대구"]])
print(s[[True, True, False, True]])
print(s[s > 5000])
  • 문자열 라벨을 이용한 슬라이싱을 하는 경우 콜론(:) 기호 뒤에 오는 인덱스에 해당하는 값도 포함된다는 점이 일반적인 인덱싱과 다르다.
In [ ]:
print(s[1:3])
print(s["서울":"인천"])
print(s.서울)

딕셔너리와 시리즈

  • 시리즈는 라벨값에 의해 인덱싱이 가능하므로, 딕셔너리와 유사하다.
  • 딕셔너리와 시리즈는 서로 변환이 가능하다.
In [ ]:
scores = {"수학" : [50, 45, 65, 70, 80],
         "영어" : [90, 20, 55, 60, 75],
         "과학" : [20, 15, 65, 90, 95]}

score_series = pd.Series(scores)

print(score_series)
print(dict(score_series))

시리즈의 함수들

  • 시리즈가 자체으로 가지고 있는 함수들이 있다.

  • 통계관련

    1. mean() : 평균
    2. std() : 표준편차
    3. count() : 전체 수
    4. min() : 최소 값
    5. max() : 최대 값
    6. diff() : 변화량
    7. describe() : 기술통계 요약
In [ ]:
grades = pd.Series([4.3, 3.7, 4.3, 3.3, 3.8, 4.2, 3.5, 2.3])
grades.name = "학점"
print(grades)
In [ ]:
print(grades.mean())
print(grades.std())
print(grades.count())
print(grades.min())
print(grades.max())
print(grades.diff())
print(grades.describe())
  • 인덱싱 관련
    1. nonzero() : 값이 0이 아닌 것들의 index를 배열로 반환
    2. notnull() : 값이 있는 것을 시리즈로 반환
    3. isnull() : 값이 없는 것을 시리즈로 반환
    4. nlargest(n) : n개의 가장 큰 값들을 시리즈로 반환 (n의 default값은 5)
    5. nsmallest(n) : n개의 가장 작은 값들을 시리즈로 반환 (n의 default값은 5)
In [ ]:
print(grades.nonzero())
print(grades.notnull())
print(grades.isnull())
print(grades.nlargest())
print(grades.nsmallest())

데이터의 추가, 갱신, 삭제

In [ ]:
s2 = pd.Series({"서울": 9631482, "부산": 3393191, "인천": 2632035, "대전": 1490158}, 
               index=["부산", "서울", "인천", "대전"])

print(s2)

추가

In [ ]:
s2["대구"] = 1234567
print(s2)

갱신

In [ ]:
s2["대구"] = 9999999
print(s2)

삭제

In [ ]:
del s2["대구"]
print(s2)