[AI][Data Analysis and Machine Learning]Pandas-Series_2

·2025년 2월 21일
post-thumbnail

Boolean selection

  • boolean Series 가 []와 함께 사용되면 True 값에 해당하는 값만 새로 반환되는 Series 객체에 포함됨
  • 다중조건의 경우, & | 를 사용하여 연결 가능
s = pd.Series(np.arange(10),np.arange(10)+1)
s
0
10
21
32
43
54
65
76
87
98
109
s>5
# 결과는 Boolean Series
0
1False
2False
3False
4False
5False
6False
7True
8True
9True
10True

dtype: bool

s[s>5]
0
76
87
98
109

dtype: int64

s[s%2==0]
0
10
32
54
76
98

dtype: int64

  • index 를 사용한 필터링도 가능하다
s.index

>Index([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype='int64')

s.index>5
>**array([False, False, False, False, False,  True,  True,  True,  True,
        True])
        ->이게 boolean mask
        
s[s.index>5]**
0
65
76
87
98
109

dtype: int64

Series 값 삭제: drop()

s=pd.Series(np.arange(100,106),['a','ab','c','d','e','k'])
s
0
a100
b101
c102
d103
e104
k105

dtype: int64

s.drop('k')
#->원본 변화 없음 
0
a100
b101
c102
d103
e104

inplace=

drop() 함수는 drop 한 결과를 새로 만들어서 리턴한거고 원본 데이터 s 는 변경하지 않는다.

numpy,pandas 그밖의 수많은 데이터 관련 모듈들 에서의 대부분의 객체 함수들은 호출한 원본객체를 변경하지는 않고 원본의 사본을 만든 뒤 사본에 연산수행하여 그 사본을 리턴하도록 동작함.

그러나 inplace=True 파라미터를 주면 사본을 만들지 않고 원본을 변화시킨다

s.drop('k',inplace=True)
#->none 리턴, 즉 원본 변화 발생함 

Slicing

  • 리스트, ndarry 와 동일하게 적용한다
  • index 가 문자열인 경우 slicing 시 마지막도 포함한다.
s2=pd.Series(np.arange(100,105),['a','b','c','d','e'])

s2[1:3]
0
b101
c102
s2['b':'d']
0
b101
c102
d103

Multi level index

s3 = pd.Series([1,2,3,4,5,6],['a','a','b','b','c','c'])
s3
#단일 level index임 
0
a1
a2
b3
b4
c5
c6
s3.index
>Index(['a', 'a', 'b', 'b', 'c', 'c'], dtype='object')
s4 = pd.Series(np.arange(100,106),index[['a','a','b','b','c','c'],[1,2,1,2,1,2],])

s4
0
a1100
2101
b1102
2103
c1104
2105
s4.index
>
MultiIndex([('a', 1),
            ('a', 2),
            ('b', 1),
            ('b', 2),
            ('c', 1),
            ('c', 2)],
           )
           
#tuple 인덱싱으로 value 접근
s4['a',2]
>101
s4['a']
0
1100
2101

→ s4: 2-level index, s4[’a’]:1-level index

xs() 를 사용한 인덱스

cross-section

# level 0 인덱싱 
s4.xs('a')
0
1100
2101
s4.xs(2,level=1)
s4.xs(2,level=-1)
0
a101
b103
c105
s4.xs((2,'b',level=(1,0))
0
b2103

Series 에서 level 별 계산

data = pd.Series(
    [100, 200, 300, 400, 500, 600],
    index=[
        ["a", "a", "a", "b", "b", "c"],  # level 0 index
        [1,   2,   3,   1,   2,   1],    # level 1 index
    ]
)
data
0
a1100
2200
3300
b1400
2500
c1600
data.sum()
>2100

data.mean()
350.0

data.groupby(level=0).sum()
0
a600
b900
c600
profile
어리둥절 빙글빙글 돌아가는 코딩세상~

0개의 댓글