9. pandas DataFrame - csv 파일로부터 DataFrame 생성
데이터분석을 위해 DataFrame을 생성하는 가장 일반적인 방법은 csv파일로부터 생성하는 방법이다.
데이터 소스로부터 추출된 csv(comma separated values) 파일로부터 DataFrame을 생성해보자.
csv파일을 불러오는 함수로 pandas.read_csv()
가 있다.
실습에 사용할 csv 파일은 kaggle에서 가져온 타이타닉 data이다.
우선 csv파일을 그냥 열어보자.
csv파일의 경우 엑셀과도 호환이 되기 때문에 엑셀에서도 열 수 있다.
scv파일 상단에 보이는 id,name,age 등을은 데이터의 header
로 header는 존재할 수도 존재하지 않을 수도 있다.
이 경우 상단에 있는 header text는 데이터가 아닌 데이터의 변수명으로 이 데이터는 header가 있는 csv이다.
1. pandas.read_csv()
# <in>
import pandas as pd
train_data = pd.read_csv('./train.csv')
train_data.head()
# <out>
나의 경우는 해당 csv의 위치가 이용하는 jupyter project file의 위치와 동일하기 때문에 간단한 경로 설정이 가능했다.
head
함수를 사용해 DataFrame을 파악해보자.
다수의 column으로 이루어진 DataFrame인 것을 확인할 수 있다.
이제 read_csv()
함수의 parameter
에 대해서 알아보자.
2. read_csv()함수의 parameter
sep
- 각 데이터 값을 구별하기 위한 구분자(separator) 설정header
- header를 무시할 경우(csv파일에 header가 없는 경우), None 설정, header= infer는 자동으로 유추한다는 의미index_col
- index로 사용할 column 설정 명시하지않으면 0-based index를 자동으로 만든다.usecols
- 실제로 dataframe에 로딩할 columns을 설정 가능하다.
- header
우리는 직전에 실습에 사용하는 csv파일의 header의 존재 유무를 파악하였다.
default(header = infer)가 아닌 헤더를 무시하도록 명시하면(header = None) 어떤식으로 DataFrame이 불러지는지 확인해보자.
# <in>
train_data = pd.read_csv('./train.csv', header = None)
train_data
기존에 header로 입력되어 있던 text가 데이터로 인식되고 0-based의 column이 반환된 것을 확인할 수 있다.
의도와는 다른 DataFrame이 만들어진 것이다.
때문에 DataFrame을 생성하기 전 csv를 통해 데이터가 어떤 구성으로 이루어져 있는지 이해가 필요하다.
- index_col = ' '
header를 봤으니 index를 지정해 보자.
이 data의 경우 passengerId가 각각 고유값을 갖기 때문에 인덱스 값으로써 적절하다.
때문에 PassengerId column을 인덱스로 명시하여 DataFrame을 만들어보겠다.
# <in>
train_data = pd.read_csv('./train.csv', index_col = 'PassengerId')
train_data.head()
특정 column을 인덱스 column으로 지정하는 parameter는 index_col이다.
- usecols = [ ]
실제로 로딩할 column을 정하여 DataFrame을 불러오는 parameter usecols에 대해 알아보자.
# <in>
train_data = pd.read_csv('./train.csv', index_col='PassengerId', usecols=['PassengerId', 'Survived', 'Pclass', 'Name'])
train_data.head()
우리가 usecol 에 명시한 col들만 dataframe으로 반환된 것을 확인할 수 있다.
추가로 만약 기존의 col 을 index col로 명시하여 DataFrame을 부르면, 해당 DataFrame에서 index col은 column으로 취급되지 않는다.
# <in>
train_data = pd.read_csv('./train.csv', index_col='PassengerId')
train_data.columns
# <out>
Index(['Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket',
'Fare', 'Cabin', 'Embarked'],
dtype='object')
index_col로 명시한 PassengerId가 columns함수로 반환되지 않는 것을 확인할 수 있다.