카테고리 없음

[Pandas]loc과 iloc | Broadcasting | 조건문 | ISIN, ISNULL,NOTNULL

ha_data 2024. 1. 9. 18:14

.loc과 .iloc

.loc

인덱스 레이블로 행을 조회, 메소드가 아닌 속성. 

주로 레이블을 기반으로 행과 열에 접근하는 데 사용되지만, boolean 배열과 함께 사용 가능

 

.iloc

인덱스 포지션을 사용하여 단일 행 또는 여러 행을 선택

index는 문자, 숫자 다 가능.

되도록 index labe 숫자는 피해야함

 

Broadingcasting

크기나 모양이 다를 때 처리 방식을 정하는 것

numpy에선 Array, pandas에선 DataFrame 또는 Series의 모양이 다른 경우에 연산이 가능하도록 모양을 처리하는 방법

numpy와 pandas의 Broadcasting의 진행 방식은 다름. 

 

numpy의 broadcasting 방법

 

부족한 차원을 확장시켜서 진행

안되는 경우

 

# pandas Series로 할 때
a = pd.Series(data = [1, 2, 3])
b = pd.Series(data = [2])
# * 연산
a * b
0    2.0
1    NaN
2    NaN
dtype: float64
# numpy Array로 할 때
a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0])
# * 연산
a * b
array([2., 4., 6.])

numpy는 Stretch 방식이고

pandas는 각각 처리하고 반영이 어려운 곳은 결측치(NA)로 처리하는 방식

 

행렬 크기가 다를 때

s1에는 d, s3에서는 c, s2에서는 다 들어있음

# Case1. 크기가 다른 Series를 DataFrame시킬 때
s1 = pd.Series(data = [1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series(data = [4, 5, 6, 7], index=['a', 'b', 'c', 'd'])
s3 = pd.Series(data = [8, 9, 10], index=['a', 'b', 'd'])
 
df1 = pd.DataFrame(
    data = {
        '1열': s1, '2열': s2, '3열': s3
    }
)
df2 = pd.DataFrame(
    data = {
        '2열': s2
    }
)
# 매칭이 안되는 곳은 결측치로 처리한다.
df11

 

a 1.0 4 8.0
b 2.0 5 9.0
c 3.0 6 NaN
d NaN 7 10.0
df2
 
2열abcd
a 4
b 5
c 6
d 7
# Case2. 모두 DataFrame이고 행렬 크기가 다르나 동일한 열이름이 있는 경우 사칙 연산은?
df1 - df2
 
1열2열3열
a NaN 0 NaN
b NaN 0 NaN
c NaN 0 NaN
d NaN 0 NaN
# Case3. DataFrame과 Series의 연산이라면?
s4 = df2.squeeze()
s4
a    4
b    5
c    6
d    7
Name: 2열, dtype: int64
# 위의 df2는 df1의 2열 조회와 동일
df1['2열']
a    4
b    5
c    6
d    7
Name: 2열, dtype: int64
# - 연산
df1
1열       2열           3열           a         b       c            d  
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN

 

 

 

Conditional Statement

파이썬이라면 True/False 기반으로 실행제어 if, else, matchcase..

SQL문이라면 조건에 맞는 데이터를 탐색 WHERE 절

Pandas에서는 True/False 로 만들어진 Series/DataFrame 으로 조건에 맞는 데이터를 탐색

#  (15세 미만 또는 여성)의 생존 명단 확인
female_mask = df['sex'] == 'female'
young_mask = df['age']<15
survived_mask = df['survived'] ==1
df[(young_mask|female_mask)&survived_mask]

 

 

ISIN과 ISNULL

Series.isin(value)

시리즈의 메서드로 각 요소가 특정 값들에 속하는지 확인, Boolean Series 반환values 집합이나 리스트 형태의 값들로 이루어진 시퀀스 

 

.isnull()

null 요소가 있는지 확인하는 메서드

NA를 발견하면 True 반환

 

.notnull()

isnull과 반대로 NA가 아닌 걸 발견하면 True 반환