320x100
# DataFrame Basics II
## Filtering DataFrames with one Condition
import pandas as pd
titanic = pd.read_csv('titanic.csv')
titanic.head()
# 이 연산은 백터 연산이 된 것이므로, 반복문이 필요 없다.
titanic.sex == 'male'
'''
0 True
1 False
2 False
3 False
4 True
...
886 True
887 False
888 False
889 True
890 True
Name: sex, Length: 891, dtype: bool
'''
# 이 방법은 numpy 와 같은 방법으로써 titanic.sex에서 male 에 속한 값만을 필터링해서 리턴하는 것이다.
# filtering의 핵심은 True 값으로 반환 되는 행에 대해서만 리턴을 해준다는 것이다.
titanic[titanic.sex == 'male']
'''
survived pclass sex age sibsp parch fare embarked deck
0 0 3 male 22.0 1 0 7.2500 S NaN
4 0 3 male 35.0 0 0 8.0500 S NaN
5 0 3 male NaN 0 0 8.4583 Q NaN
6 0 1 male 54.0 0 0 51.8625 S E
7 0 3 male 2.0 3 1 21.0750 S NaN
... ... ... ... ... ... ... ... ... ...
883 0 2 male 28.0 0 0 10.5000 S NaN
884 0 3 male 25.0 0 0 7.0500 S NaN
886 0 2 male 27.0 0 0 13.0000 S NaN
889 1 1 male 26.0 0 0 30.0000 C C
890 0 3 male 32.0 0 0 7.7500 Q NaN
577 rows × 9 columns
'''
# 만약 filtering을 했고, filtering 한 값중에서 fare 열값만 보여주고 싶다면
# 방법1은 loc을 써서 이렇게 하면 된다
titanic.loc[titanic.sex == 'male','fare']
'''
0 7.2500
4 8.0500
5 8.4583
6 51.8625
7 21.0750
...
883 10.5000
884 7.0500
886 13.0000
889 30.0000
890 7.7500
Name: fare, Length: 577, dtype: float64
'''
# 방법 2는 체인인덱싱이라고 부르는 기법으로써 대괄호 두개를 연달아 쓰는 방법이다.
# 하지만 이 방법이 나에겐 편하지만, 전체적으로는 문제를 야기할 수 있다고 한다.
# 방법 1을 추천한다고한다.
titanic[titanic.sex == 'male']['fare']
'''
0 7.2500
4 8.0500
5 8.4583
6 51.8625
7 21.0750
...
883 10.5000
884 7.0500
886 13.0000
889 30.0000
890 7.7500
Name: fare, Length: 577, dtype: float64
'''
mask1 = titanic.sex == 'male'
mask1
# titanic[mask1]과
titanic_male = titanic.loc[mask1]
# 은 같은 결과값을 가지고 있다.
titanic_male.head()
titanic.dtypes
'''
survived int64
pclass int64
sex object
age float64
sibsp int64
parch int64
fare float64
embarked object
deck object
dtype: object
'''
# titanic의 dtypes를 보면 sex, embarked, deck에 대하여 object 값으로 박혀있다.
# 이것들을 필터링하여서 이것들 만 나오게 하거나, 이것들 만 안나오게 할 수도 있다.
mask2 = titanic.dtypes == object
mask2
'''
survived False
pclass False
sex True
age False
sibsp False
parch False
fare False
embarked True
deck True
dtype: bool
'''
# 이렇게 하면, mask2로 씌워진 object 값에 대해서만 리턴하고
titanic.loc[:, mask2]
# 이렇게 하면 object가 아니였던 값에 대해서만 리턴이 된다.
titanic.loc[:, ~mask2]
# 여기까지 mask1, mask2를 만들었다.
# mask1의 결과물은 sex가 male 경우만.
# mask2의 결과물은 dtypes가 object인 경우를 말했다.
# 이 둘을 함께 필터링해주게 되면
titanic.loc[mask1, mask2]
# dtypes가 object이면서 sex 가 male인 것만 출력된다.
'''
sex embarked deck
0 male S NaN
4 male S NaN
5 male Q NaN
6 male S E
7 male S NaN
... ... ... ...
883 male S NaN
884 male S NaN
886 male S NaN
889 male C C
890 male Q NaN
577 rows × 3 columns
'''
# 즉, 위의 것들을 응용하자면
titanic.loc[~mask1, ~mask2]
'''
survived pclass age sibsp parch fare
1 1 1 38.0 1 0 71.2833
2 1 3 26.0 0 0 7.9250
3 1 1 35.0 1 0 53.1000
8 1 3 27.0 0 2 11.1333
9 1 2 14.0 1 0 30.0708
... ... ... ... ... ... ...
880 1 2 25.0 0 1 26.0000
882 0 3 22.0 0 0 10.5167
885 0 3 39.0 0 5 29.1250
887 1 1 19.0 0 0 30.0000
888 0 3 NaN 1 2 23.4500
314 rows × 6 columns
'''
# 이런값이 나올 수도 있다.
# male이 아니면서, dtypes가 object가 아닌 경우
300x250
'개발일지 > Pandas' 카테고리의 다른 글
pandas (판다스) 기초9 **중요** filtering with any, all, between, isin, 열, 행 삭제 추가하기 (0) | 2022.07.18 |
---|---|
pandas (판다스) 기초 8 and, or (0) | 2022.07.18 |
pandas 판다스 틀린부분 복기 (0) | 2022.07.16 |
pandas 판다스 기초 6 (0) | 2022.07.16 |
pandas 판다스 기초 5 (0) | 2022.07.15 |