파이썬 기초 문법 강의 – 6일차 Pandas 2
이번 시간에는 이어서 판다스(Pandas)에 대해서 알아보겠습니다. 저번 시간의 판다스의 데이터 구조에 대해서 간단하게 알아보았는데요. 이제는 활용하는 방법에 대해서 간단히 알아보겠습니다.
판다스 활용하기
저번 시간에 이어서 타이타닉 데이터를 불러와서 사용해보도록 하겠습니다.
불러올 때 index_col 옵션은 데이터프레임에서 인덱스로 사용할 열을 지정하는 역할을 하는데요. 아래처럼 이 옵션을 생략하면 기본적으로 인덱스는 0부터 시작하는 정수로 설정됩니다.
import pandas as pd
TRAIN_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv"
df = pd.read_csv(TRAIN_DATA_URL)
print(df)
df.info()
이제 원하는 열만 선택한다고 하면 df[[‘survived’,’sex’]]를 통해 원하는 열만 선택해서 볼 수 있습니다.
>>> df[['survived','sex']]
survived sex
0 0 male
1 1 female
2 1 female
3 1 female
4 0 male
그리고 열 이름을 바꾼다고 하면 rename을 통해서 할 수 있습니다.
>>> df.rename(columns={'survived':'생존자'})
생존자 sex age n_siblings_spouses ... class deck embark_town alone
0 0 male 22.0 1 ... Third unknown Southampton n
그리고 딱 하나의 값을 가져오는 것은 at함수를 이용하면 되는데요. at[인덱스,칼럼]을 통해 불러올 수 있습니다.
>>> df.at[1,'sex']
'female'
그리고 df.iloc을 통해 정수로 슬라이싱도 가능한데요. 열을 부를때는 [:,1] 이런 형태나 그냥 열이름으로 인덱싱이 가능합니다. 행 역시 동일합니다.
df.iloc[:,1]
0 male
1 female
2 female
3 female
Name: sex, Length: 627, dtype: object
>>> df['sex']
0 male
1 female
2 female
3 female
Name: sex, Length: 627, dtype: object
그리고 value_counts()를 통해 남녀가 어느정도 비율인지 한번에 알수 있습니다.
>>> df['sex'].value_counts()
male 410
female 217
Name: sex, dtype: int64
판다스 조건으로 데이터 선택하기
그리고 조건을 입력하는 것도 가능한데요. 나이가 22살 보다 많은 사람을 찾는 것은 아래와 같이 간단하게 할 수 있습니다.
>>> df['age'] > 22
0 False
1 True
2 True
3 True
4 True
여기에 다중 조건을 준다면 아래처럼 조건을 준 다음 and는 &, or는 |를 통해 구현할 수 있습니다.
나이가 22살이고 요금을 10달러 이상인 사람들을 조회해봤습니다. 그리고 정렬은 sort_values(by=[‘age’]) 형태로 가능합니다.
>>> con1 = (df['age'] > 22)
>>> con2 = (df['fare'] > 10)
>>> df.loc[con1 & con2]
survived sex age ... deck embark_town alone
1 1 female 38.0 ... C Cherbourg n
3 1 female 35.0 ... C Southampton n
6 1 female 27.0 ... unknown Southampton n
10 0 male 39.0 ... unknown Southampton n
13 1 male 28.0 ... unknown Southampton y
.. ... ... ... ... ... ... ...
6
[307 rows x 10 columns]
>>> df.loc[con1 | con2].sort_values(by='age',ascending=False).head()
survived sex age ... deck embark_town alone
449 1 male 80.0 ... A Southampton y
74 0 male 71.0 ... A Cherbourg y
356 0 male 71.0 ... unknown Cherbourg y
91 0 male 70.5 ... unknown Queenstown y
527 0 male 70.0 ... B Southampton n
그리고 특정값이 포함되었는지는 isin 함수를 활용할 수 있습니다. 아래는 데크에서 C라는게 있는지 확인해보는 것입니다.
>>> df['deck'].isin(['C'])
0 False
1 True
2 False
3 True
그룹이라는 함수를 통해서 그룹을 만들 수 있는데요. 결과를 보니 여자의 생존률이 더 높다는 것을 알 수 있습니다.
- mean은 평균
- median은 중앙값
- sum은 합계
- count는 갯수
- describe는 요약통계
- var은 분산
- std는 표준편차
- mode 최빈값
등 다양한 기술 통계를 볼 수 있습니다.
>>> df.groupby('sex').mean()
survived age n_siblings_spouses parch fare
sex
female 0.778802 28.652074 0.654378 0.62212 47.118741
male 0.180488 30.149585 0.487805 0.25122 27.646044