데이터 추가하기
기존 데이터프레임의 칼럼을 이용하여 새로운 칼럼을 추가할 수 있다.
import numpy as np
import pandas as pd
flight = pd.read_csv('./Clean_Dataset.csv')# 새로운 칼럼 만들기
flight['price2'] = flight['price'] * 2
flight.head()| Unnamed: 0 | airline | flight | source_city | departure_time | stops | arrival_time | destination_city | class | duration | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | SpiceJet | SG-8709 | Delhi | Evening | zero | Night | Mumbai | Economy | 2.17 | 1 | 5953 | 11906 |
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 1 | 5953 | 11906 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 1 | 5956 | 11912 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 1 | 5955 | 11910 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 1 | 5955 | 11910 |
코드 수행 결과를 보면 price2라는 새로운 칼럼을 정의하고 기존 칼럼인 price를 2배로 한 것을 저장한 것을 볼 수 있다.
이번에는 insert 함수를 사용하여 원하는 위치에 칼럼을 생성해보겠다.
df.insert(loc, column, value, allow_duplicates=False)
- loc : 삽입될 열의 위치
- column : 삽입될 열의 이름
- value : 삽입될 열의 값
- allow_duplicates : {True or False} 기본값은 False로 True일 경우 중복 열의 삽입을 허용
# 새로운 칼럼 원하는 위치에 넣기
flight.insert(10, 'duration2', flight['duration'] * 10)
# 처음 0부터 시작하면 10번 칼럼으로 insert
flight.head()| Unnamed: 0 | airline | flight | source_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | SpiceJet | SG-8709 | Delhi | Evening | zero | Night | Mumbai | Economy | 2.17 | 21.7 | 1 | 5953 | 11906 |
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5953 | 11906 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 21.7 | 1 | 5956 | 11912 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 22.5 | 1 | 5955 | 11910 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 | 11910 |
데이터 삭제하기
데이터프레임에서 필요 없는 칼럼은 삭제할 수 있다.
기본적인 삭제는 drop 메소드를 활용한다. drop 메소드의 axis 파라미터를 이용하여 행을 기준으로 삭제할 것인지 칼럼을 기준으로 삭제할 것인지 정의할 수 있다.
- axis=1 : 열 레벨로 데이터를 삭제
- axis=0 : 행 레벨로 데이터를 삭제
# drop 메소드 사용하여 데이터 삭제하기
flight.drop('price2', axis=1).head()| Unnamed: 0 | airline | flight | source_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | SpiceJet | SG-8709 | Delhi | Evening | zero | Night | Mumbai | Economy | 2.17 | 21.7 | 1 | 5953 |
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5953 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 21.7 | 1 | 5956 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 22.5 | 1 | 5955 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 |
# axis 속성 이해하기
flight.drop(index=0, axis=0).head()| Unnamed: 0 | airline | flight | source_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5953 | 11906 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 21.7 | 1 | 5956 | 11912 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 22.5 | 1 | 5955 | 11910 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 | 11910 |
| 5 | 5 | Vistara | UK-945 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 | 11910 |
칼럼명 변경하기
데이터 분석을 위한 데이터 전처리 과정은 프로젝트를 수행하는 다양한 팀이 참석하여 진행할 수 있으므로 원본 데이터의 칼럼명보다 단순하거나 직관적이어야 한다.
rename 메소드를 활용하면 데이터 칼럼명을 변경할 수 있다.
# rename 사용하여 칼럼명 변경하기
flight = flight.rename(columns = {'airline' : 'aireline_name', 'source_city' : 'departure_city'})
flight.head()| Unnamed: 0 | aireline_name | flight | departure_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | SpiceJet | SG-8709 | Delhi | Evening | zero | Night | Mumbai | Economy | 2.17 | 21.7 | 1 | 5953 | 11906 |
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5953 | 11906 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 21.7 | 1 | 5956 | 11912 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 22.5 | 1 | 5955 | 11910 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 | 11910 |
데이터프레임 정렬하기
데이터 분석할 때 원하는 칼럼을 기준으로 데이터프레임을 정렬하여 조회할 때가 있다.
sort_values 메소드를 활용하면 데이터 프레임을 정렬할 수 있다. 역순으로 정렬하기 위해서는 ascending 파라미터를 False로 지정한다.
# sort_values 메소드와 ascending 매개변수 지정하여 데이터프레임 역순으로 정렬하기
flight = flight.sort_values(by = 'Unnamed: 0', ascending=False)
flight.head()| Unnamed: 0 | aireline_name | flight | departure_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 300152 | 300152 | Vistara | UK-822 | Chennai | Morning | one | Evening | Hyderabad | Business | 10.08 | 100.8 | 49 | 81585 | 163170 |
| 300151 | 300151 | Vistara | UK-828 | Chennai | Early_Morning | one | Evening | Hyderabad | Business | 10.00 | 100.0 | 49 | 81585 | 163170 |
| 300150 | 300150 | Vistara | UK-832 | Chennai | Early_Morning | one | Night | Hyderabad | Business | 13.83 | 138.3 | 49 | 79099 | 158198 |
| 300149 | 300149 | Vistara | UK-826 | Chennai | Afternoon | one | Night | Hyderabad | Business | 10.42 | 104.2 | 49 | 77105 | 154210 |
| 300148 | 300148 | Vistara | UK-822 | Chennai | Morning | one | Evening | Hyderabad | Business | 10.08 | 100.8 | 49 | 69265 | 138530 |
# sort_values 메소드로 오름차순 정렬하기
flight = flight.sort_values(by = 'Unnamed: 0', ascending=True)
flight.head()| Unnamed: 0 | aireline_name | flight | departure_city | departure_time | stops | arrival_time | destination_city | class | duration | duration2 | days_left | price | price2 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | SpiceJet | SG-8709 | Delhi | Evening | zero | Night | Mumbai | Economy | 2.17 | 21.7 | 1 | 5953 | 11906 |
| 1 | 1 | SpiceJet | SG-8157 | Delhi | Early_Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5953 | 11906 |
| 2 | 2 | AirAsia | I5-764 | Delhi | Early_Morning | zero | Early_Morning | Mumbai | Economy | 2.17 | 21.7 | 1 | 5956 | 11912 |
| 3 | 3 | Vistara | UK-995 | Delhi | Morning | zero | Afternoon | Mumbai | Economy | 2.25 | 22.5 | 1 | 5955 | 11910 |
| 4 | 4 | Vistara | UK-963 | Delhi | Morning | zero | Morning | Mumbai | Economy | 2.33 | 23.3 | 1 | 5955 | 11910 |