python/pandas

9. pandas DataFrame - csv 파일로부터 DataFrame 생성

Abokadoh 2023. 2. 18. 16:36

데이터분석을 위해 DataFrame을 생성하는 가장 일반적인 방법은 csv파일로부터 생성하는 방법이다.

 

데이터 소스로부터 추출된 csv(comma separated values) 파일로부터 DataFrame을 생성해보자.

 

csv파일을 불러오는 함수로 pandas.read_csv()가 있다.

 

실습에 사용할 csv 파일은 kaggle에서 가져온 타이타닉 data이다.

 

train.csv
0.06MB

우선 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으로 지정하는 parameterindex_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함수로 반환되지 않는 것을 확인할 수 있다.