[데이터분석] Pandas - Series

2024. 8. 13. 16:03데이터 사이언스

Series 생성

  • pd.Series(data, index = ) → List, Dictionary, Tuple, ndarray 등
  • numpy와 다르게 다른 유형(자료형)의 데이터를 다 묶을 수 있음
  • pandas는 계산용이 아닌, 분석용이기 때문에 다양한 형태의 데이터 호환이 가능함
상품명 초코파이
제조사 오리온
열량 171
가격 5830

 

List 사용

# pd.Series(data)

series = pd.Series(['초코파이', '오리온', 171, 5830])
print(series)
  • +) index 설정
    series = pd.Series(['초코파이', '오리온', 171, 5830], index = ['상품명', '제조사', '열량', '가격'])
    print(series)
    
     

 

Tuple 사용

  • Tuple 자료형: (data1, data2, data3)
food_info = ('초코파이', '오리온', 171, 5830)
index_name = ('상품명', '제조사', '열량', '가격')
series = pd.Series(food_info, index = index_name)
print(series)

 

 

Dictionary 사용

  • Dictionary를 사용하는 것이 일반적 : 대응이 되기 때문
  • Dictionary 자료형: {key : value}
series = pd.Series({'상품명':'초코파이','제조사':'오리온','열량':171,'가격:5830))
print(series)

 


Series 속성 확인

obj.index # series 객체의 index 알 수 있음
obj.values # series 객체의 데이터(value)알 수 있음

# 결측치(NaN)확인 -> 같은 형태의 대응되는 series가 나옴 
obj.isnull()
obj.notnull()

Series 데이터 선택

obj['제조사'] # index 사용

obj.loc['제조사'] #[문자] loc 사용 # loc: location

obj.iloc[1] #[숫자] iloc: index location
  • 피카츄의 속성은 무엇일까? (인덱싱)

value = {'이름':'피카츄','속성':'전기','HP':35, '공격':55, '방어':40}
obj = pd.Series(value)
print(obj)

print("\\nindex 이름 사용")
print(obj['속성'])

print("\\nloc 사용")
print(obj.loc['속성'])

print("\\niloc 사용")
print(obj.iloc[1])

print(obj.iloc[0]) # 피카츄
print(obj.iloc[2]) # 35
print(obj.iloc[3]) # 55
  • 피카츄의 HP, 공격, 방어 수치는? (슬라이싱)

 

 

print("\\nindex 이름 사용")
print(obj[['HP','공격','방어']])

print("\\nloc 사용 >> index 이름 'HP'부터 '방어'까지 출력")
print(obj.loc['HP':'방어'])

print("\\niloc 사용 >> index 번호 2부터 4까지 출력")
print(obj.iloc[2:5])

 


Series 연산

  • 단일 series 내 연산
    obj + 2 # 덧셈
    obj -2 # 뺄셈
    obj * 2 # 곱셈
    obj / 2 # 나눗셈
    

print("\n피카츄의 HP가 2배 증가")
# 데이터 선택 방법: loc을 사용한 인덱싱
obj['HP'] = obj.loc['HP'] * 2
print(obj)

print("\n피카츄의 공격력과 방어력이 2배 감소")
# 데이터 선택 방법: iloc을 사용한 슬라이싱
obj.iloc[3:5]= obj.iloc[3:5]/2
print(obj)

print("\nHP, 공격, 방어 총합 계산")
# 데이터 선택 방법: loc을 사용한 슬라이싱
# 집계함수 활용
print(obj.loc['HP':'방어'].sum())

print("\nHP(2), 공격, 방어(4) 평균 계산")
# 데이터 선택 방법: iloc을 사용한 슬라이싱
# 집계함수 활용
print(obj.iloc[2:5].mean())
  • Series간 연산
    • index끼리 매칭되는 값이 없(NaN)는 경우 출력값은 NaN
    • 초기에 결측치를 fill_value 로 처리해주는 방법도 가능
    • 동일한 index 가진 값끼리 연산
# 덧셈
obj + obj2
obj1.add(obj2, fill_value= )
obj2.add(obj1, fill_value= )

# 뺄셈 - 순서 주의
obj1-obj2
obj1.sub(obj2, fill_value= )

# 곱셈 - 순서 주의
obj1* obj2
obj1.mul(obj2, fill_value= )
obj2.mul(obj1, fill_value= )

# 나눗셈
obj1 / obj2
obj1.div(obj2, fill_value= )

import pandas as pd
import numpy as np

obj1 = pd.Series(['피카츄', 35, 55, 40, np.nan], index = ['이름', 'HP', '공격', '방어', '스피드'])
obj2 = pd.Series({'이름': '파이리', 'HP': 39, '공격': 52, '방어': np.nan, '스피드': 65})
print(obj1)
print(obj2)
print()

obj1_num=obj1.loc['HP':'스피드']
obj2_num=obj2.iloc[1:]
print(obj1_num)
print(obj2_num)

print("\nobj1_num + obj2_num")
print(obj1_num + obj2_num)
print("\nobj1_num.add(obj2_num)")
print(obj1_num.add(obj2_num))

print("\n결측치 30으로 채우기")
print(obj1_num.add(obj2_num, fill_value=30))