TECH_LOG

Python Library_Pandas1[ Pandas의 개념,Series1 ] 본문

Programming

Python Library_Pandas1[ Pandas의 개념,Series1 ]

HongDaang 2023. 3. 22. 16:50

ABC부트캠프_2023.03.22

Pandas

- 표 형식의 데이터나 다양한 형태의 데이터를 다룸
- 시리즈(Series) 클래스와 데이터프레임(DataFrame) 클래스를 제공

 


Series

일련의 객체를 담을 수 있는 1차원 배열의 자료구조
index 데이터와 연관된 이름을 가짐

시리즈 객체는 라벨 값에의해 인덱싱 가능하므로
인덱스 라벨 값을 키로 갖는 딕셔너리 자료형과 같다고 볼수있음(in, items, key와 value 접근)

obj = pd.Series([2,-7, 4, 10])
obj
>>>
0     2
1    -7
2     4
3    10
dtype: int64

obj.values
>>>array([ 2, -7,  4, 10], dtype=int64)

obj.index
>>>RangeIndex(start=0, stop=4, step=1)

obj2 = pd.Series([2,-7, 4, 10], index = ['d','b','a','c'])
obj2
>>>
d     2
b    -7
a     4
c    10
dtype: int64

obj2.index
>>> Index(['d', 'b', 'a', 'c'], dtype='object')
더보기
obj2['a']
>>>4

obj2['d']=6
obj2[['c','a','d']]
>>>
c    10
a     4
d     6
dtype: int64

obj2[obj2>0]
>>>
d     6
a     4
c    10
dtype: int64

obj2 * 2
>>>
d    12
b   -14
a     8
c    20
dtype: int64

- 딕셔너리 객체를 시리즈로 생성

sdata = {'Ohio' : 3500, 'Texas' : 7100,'Oregon' : 6000, 'Utah' : 1200}
obj3 = pd.Series(sdata)
obj3
>>>
Ohio      3500
Texas     7100
Oregon    6000
Utah      1200
dtype: int64


states = ['California', 'Ohio', 'Oregon','Texas']
obj4 = pd.Series(sdata, index=states)
obj4
>>>
California       NaN
Ohio          3500.0
Oregon        6000.0
Texas         7100.0
dtype: float64

pd.isnull(obj4)    # null 이면 True   
>>>
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

pd.notnull(obj4)   # null 이 아니면 False
>>>
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

obj4.isnull()  # null 이면 True   # pd.isnull() 둘 중 어느 것을 사용하여도 상관 없음
>>>
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

obj3 + obj4     # 결측값이 있는 곳은 계산x
>>>
California        NaN
Ohio           7000.0
Oregon        12000.0
Texas         14200.0
Utah              NaN

obj4.name = 'population'    # 시리즈 이름 설정
obj4.index.name = 'state'   # 인덱스 이름 설정
obj4
>>>
state
California       NaN
Ohio          3500.0
Oregon        6000.0
Texas         7100.0
Name: population, dtype: float64
더보기
obj
>>>
0     2
1    -7
2     4
3    10
dtype: int64


obj.index = ['bob', 'steve','jeff','ryan']    
obj
>>>
bob       2
steve    -7
jeff      4
ryan     10
dtype: int64

-- 딕셔너리의 원소는 순서가 없으므로 순서를 정하고 싶을경우 인덱스를 리스트로 지정

 


활용_ 인구데이터

s = pd.Series([9904312, 3448737, 2890451, 2466052],
              index=["서울", "부산", "인천", "대구"])
s
>>>
서울    9904312
부산    3448737
인천    2890451
대구    2466052


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


s2 - s    # 결측값 있는 것은 계산 x, 같은 키 값 찾아서 계산
>>>
대구         NaN
대전         NaN
부산    -55546.0
서울   -272830.0
인천   -258416.0

s.values - s2.values     # 키 상관 없이 값(vlues)끼리 뺴줌
                         # 의미 없는 데이터가 됨
>>>array([ 6511121, -6182745,   258416,   975894]

ds = s - s2 
ds
>>>
대구         NaN
대전         NaN
부산     55546.0
서울    272830.0
인천    258416.0

ds[ds.notnull()]    #notnull의 결과 True인 경우에만 ds 계산
>>>
부산     55546.0
서울    272830.0
인천    258416.0

rs = (s - s2) / s2 * 100
rs = rs[rs.notnull()]
rs
>>>
부산    1.636984
서울    2.832690
인천    9.818107
Comments