티스토리 뷰
#5 판다스 chapter 5. 판다스 시리즈 응용하기
1. 시리즈와 불린 추출
원하는 데이터를 추출할 때 특정 인덱스를 지정하여 추출했었다. 하지만 보통은 추출할 데이터의 정확한 인덱스를 모를 경우가 더 많다. 이때 사용하는 방법이 불린 추출이다. 불린 추출은 특정 조건을 만족하는 값만 추출할 수 있다.
이번에는 scientist.csv 라는 이름의 데이터를 불러오자.
(데이터 출처 : github.com/easysIT/doit_pandas)
scientists = pd.read_csv('../data/scientists.csv')
ages = scientists['Age']
print(ages.max())
90
print(ages.mean())
59.125
print(ages[ages > ages.mean()])
1 61
2 90
3 66
7 77
Name: Age, dtype: int64
위 예에서 마지막 코드는 평균 나이보다 나이가 많은 사람의 데이터만 출력되었다. 이는 아래의 결과를 보면 조건식을 만족한 값만 출력했다는 의미다.
print(ages > ages.mean() )
0 False
1 True
2 True
3 True
4 False
5 False
6 False
7 True
Name: Age, dtype: bool
2. 시리즈와 브로드캐스팅
앞서 보았던 ages > ages.mean()의 결괏값의 개수가 여러 개라는 것이 이상했을 것이다. 이렇게 시리즈나 데이터프레임에 있는 모든 데이터에 대해 한 번에 연산하는 것을 브로드캐스팅이라고 한다. 그리고 시리즈처럼 여러 개의 값을 가진 데이터를 벡터라 하고 단순 크기를 나타내는 데이터를 스칼라라고 한다.
다음은 같은 길이의 벡터로 더하기 연산과 곱하기 연산을 수행한 것이다.
print(ages + ages)
0 74
1 122
2 180
3 132
4 112
5 90
6 82
7 154
Name: Age, dtype: int64
print(ages * ages)
0 1369
1 3721
2 8100
3 4356
4 3136
5 2025
6 1681
7 5929
Name: Age, dtype: int64
만약 벡터에 스칼라를 연산하면 어떻게 될까?
print(ages + 100)
0 137
1 161
2 190
3 166
4 156
5 145
6 141
7 177
Name: Age, dtype: int64
print(ages * 2)
0 74
1 122
2 180
3 132
4 112
5 90
6 82
7 154
Name: Age, dtype: int64
또 길이가 서로 다른 벡터를 연산하면 어떻게 될까? 시리즈와 시리즈를 연산하는 경우 같은 인덱스의 값만 계산한다.
print(pd.Series([1, 100]))
0 1
1 100
dtype: int64
print(ages + pd.Series([1, 100]))
0 38.0
1 161.0
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
dtype: float64
위 결과처럼 인덱스가 일치한 0,1 만 계산했다는 것을 알 수 있다. 나머지 인덱스는 계산을 할 수 없기 때문에 NaN으로 처리된다.
다음은 sort_index 메서드를 사용한 것이다. 이때 ascending 인자로 False를 전달하여 인덱스 역순으로 데이터를 정렬했다.
rev_ages = ages.sort_index(ascending=False)
print(rev_ages)
7 77
6 41
5 45
4 56
3 66
2 90
1 61
0 37
Name: Age, dtype: int64
그렇다면 인덱스 순서대로 정렬된 ages와 역순으로 정렬된 rev_age를 연산하면 어떻게 될까요?
print(ages * 2)
0 74
1 122
2 180
3 132
4 112
5 90
6 82
7 154
Name: Age, dtype: int64
print(ages + rev_ages)
0 74
1 122
2 180
3 132
4 112
5 90
6 82
7 154
Name: Age, dtype: int64
위처럼 벡터와 벡터의 연산은 일치하는 인덱스의 값끼리 수행한다는 것을 잊지 말아야 한다.
출처 : 데이터 분석을 위한 판다스 입문
'판다스 입문' 카테고리의 다른 글
판다스 입문 (그래프 그리기-앤스콤 4분할 그래프) (0) | 2021.03.20 |
---|---|
판다스 데이터프레임과 시리즈( 데이터 프레임 다루기) (0) | 2021.03.20 |
판다스 데이터프레임과 시리즈(시리즈 다루기) (0) | 2021.03.18 |
판다스의 시작(기초적인 통계 계산, 그래프 그리기) (0) | 2021.03.18 |
판다스의 시작(데이터 추출하기) (0) | 2021.03.14 |