import pandas as pd
from pandas import Series, DataFrame
import math
Series는 1차원 데이터 객체입니다. 여기서 차원이란 변수의 수이고, 데이터 객체란 데이터를 담고 있는 그릇과도 같습니다. 물리적 공간에서 차원이 높아질수록 점, 선, 면을 표현하기 위한 축의 개수가 더 많아지듯, 데이터 공간에서도 차원이 높아질수록 자료구조가 더 많은 데이터 층위(layer)를 갖습니다.
Series를 자료구조와 비교하자면 Series는 키(key)에 대응하는 값(value)이 1개인 딕셔너리(dictionary)와도 같습니다. Series에서 인덱스-값의 관계는 딕셔너리에서 키-값의 관계에 대응합니다. Series에 변수의 수가 추가되면 DataFrame이 됩니다. 벡터(vector) 관점에서 보면 Series는 1차원 벡터 데이터(A = [1, 5, 3, 4])에 행 인덱스(row index)를 붙인 것이기도 합니다. 요약하자면 Series는 변수의 수가 1개인 자료구조, 열이 1개인 DataFrame입니다.
obj = pd.Series([4, 7, -5, 3]) #Series는 1차원 데이터 구조
obj
#결과:
0 4
1 7
2 -5
3 3
dtype: int64
print(obj.values) ## obj의 내용 출력
print(obj.index) # like range(4) ## obj의 인덱스 출력
#결과:
[ 4 7 -5 3]
RangeIndex(start=0, stop=4, step=1)
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) # index 임의로 설정하기 ## 인덱스가 0, 1, 2, 3... 이 아닌 d, b, a, c가 됨
print(obj2)
#결과:
d 4
b 7
a -5
c 3
dtype: int64
obj2.index
#결과:
Index(['d', 'b', 'a', 'c'], dtype='object')
print(obj2['a']) # obj2에서 index가 'a'인 값 출력
obj2['d'] = 6 # index 'd'의 value 변경 : 4 -> 6
print(obj2[['c', 'a', 'd']]) #원하는 인덱스만 출력할 때
#결과:
-5
c 3
a -5
d 6
dtype: int64
print(obj2 > 0) #참과 거짓으로 출력
obj2[obj2 > 0] #obj2의 value가 0 이상인 경우에만 출력
#결과:
d True
b True
a False
c True
dtype: bool
d 6
b 7
c 3
dtype: int64
print(obj2 * 2) #각 원소 곱하기 2
print(math.e**obj2) # exponential 함수 #**은 제곱
#결과:
d 12
b 14
a -10
c 6
dtype: int64
d 403.428793
b 1096.633158
a 0.006738
c 20.085537
dtype: float64
print('b' in obj2.index) ## b가 obj.index에 있으면 True 없으면 False 출력
print('e' in obj2.index)
#결과:
True
False
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} #딕셔너리
print(sdata)
obj3 = pd.Series(sdata) ## 딕셔너리를 Series로 변환
obj3
#결과:
{'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
states = ['California', 'Ohio', 'Oregon', 'Texas'] ## 리스트
print(states)
obj4 = pd.Series(sdata, index=states) ## 리스트를 Series로 변환
obj4 ## value 가 float형으로 찍히는 이유 : pd.Series 함수를 사용하여 데이터를 pandas Series로 변환할 때, NaN (Not a Number) 값을 포함하게 되면 해당 Series의 모든 데이터는 실수형으로 자동 변환됩니다.
## 만약 NaN 값이 없다면, 원래의 데이터 타입을 유지할 수 있습니다
#결과:
['California', 'Ohio', 'Oregon', 'Texas']
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
dtype: float64
pd.isnull(obj4) # null 있는지 확인
#결과:
California True
Ohio False
Oregon False
Texas False
dtype: bool
pd.notnull(obj4) # null 없는지 확인
#결과:
California False
Ohio True
Oregon True
Texas True
dtype: bool
obj4.isnull() # null 있는지 확인하는 또 다른 형태
#결과:
California True
Ohio False
Oregon False
Texas False
dtype: bool