0. 들어가며
- 데이터 분석을 하다보면 Pandas를 많이 사용하게 된다.
- 데이터들의 Column을 더하고 싶을때, 어떻게 하면 좋을까?
- 만약 Column에 결측치가 있다면 어떻게 처리하면 될까?
1. Pandas를 이용해서 Titanic 데이터 Column 더하기
1
2
3
4
5
import pandas as pd
df = pd.read_csv('https://media.githubusercontent.com/media/hmkim312/datas/main/titanic/train.csv')
df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
1
df.info()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
- 타이타닉 데이터에서는 Null이 포함된 컬럼과 모두 수치가 들어가 있는 컬럼이 있다.
1
df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
- 이 중에서 SibSp(형제, 자매, 배우자의 합) + Parch (부모, 자식의 합) + 1(자기 자신)을 해서 Family_Size 컬럼을 만들어 본다.
1
2
df['Family_Size'] = df['SibSp'] + df['Parch'] + 1
df[['SibSp', 'Parch', 'Family_Size']]
SibSp | Parch | Family_Size | |
---|---|---|---|
0 | 1 | 0 | 2 |
1 | 1 | 0 | 2 |
2 | 0 | 0 | 1 |
3 | 1 | 0 | 2 |
4 | 0 | 0 | 1 |
... | ... | ... | ... |
886 | 0 | 0 | 1 |
887 | 0 | 0 | 1 |
888 | 1 | 2 | 4 |
889 | 0 | 0 | 1 |
890 | 0 | 0 | 1 |
891 rows × 3 columns
- int형 Column 2개를 더했기 때문에, 숫자를 더한값이 Family_Size가 되었다
2. Null이 있는 Column 더하기
- 만일 Cabin과 Ticket Column과 같이 Null이 포함된 string형 Colummns 더하면 어떻게 될까?
1
df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | Family_Size | Ticket_Cabin | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S | 2 | A/5 21171 |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C | 2 | PC 17599C85 |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S | 1 | STON/O2. 3101282 |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S | 2 | 113803C123 |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S | 1 | 373450 |
1
2
df['Ticket_Cabin'] = df['Ticket'] + df['Cabin']
df[['Ticket', 'Cabin', 'Ticket_Cabin']]
Ticket | Cabin | Ticket_Cabin | |
---|---|---|---|
0 | A/5 21171 | NaN | NaN |
1 | PC 17599 | C85 | PC 17599C85 |
2 | STON/O2. 3101282 | NaN | NaN |
3 | 113803 | C123 | 113803C123 |
4 | 373450 | NaN | NaN |
... | ... | ... | ... |
886 | 211536 | NaN | NaN |
887 | 112053 | B42 | 112053B42 |
888 | W./C. 6607 | NaN | NaN |
889 | 111369 | C148 | 111369C148 |
890 | 370376 | NaN | NaN |
891 rows × 3 columns
- Null이 포함된 Column을 더하게 되면 Null로 되게 된다.
- 그렇다면 Null은 무시하고 더하는 방법은 무엇이 있을까?
1
2
df['Ticket_Cabin'] = df['Ticket'].fillna('') + df['Cabin'].fillna('')
df[['Ticket', 'Cabin', 'Ticket_Cabin']]
Ticket | Cabin | Ticket_Cabin | |
---|---|---|---|
0 | A/5 21171 | NaN | A/5 21171 |
1 | PC 17599 | C85 | PC 17599C85 |
2 | STON/O2. 3101282 | NaN | STON/O2. 3101282 |
3 | 113803 | C123 | 113803C123 |
4 | 373450 | NaN | 373450 |
... | ... | ... | ... |
886 | 211536 | NaN | 211536 |
887 | 112053 | B42 | 112053B42 |
888 | W./C. 6607 | NaN | W./C. 6607 |
889 | 111369 | C148 | 111369C148 |
890 | 370376 | NaN | 370376 |
891 rows × 3 columns
- NUll이 있는 컬럼에 fillna()를 사용해서 Null을 특정한 값으로 채워준후 두 컬럼을 더해주면 된다.