본문 바로가기

Programming/Python

Pandas 데이터 핸들링 방법 살펴보기

반응형

안녕하세요 남산도서관 입니다.

이번포스팅에서는 판다스를 활용한 DataFrame 처리에 대해 알아 보려고 합니다.

예제 실행을 위해서 아래링크에서 "titanic_train.csv" 파일을 다운받아 사용했습니다.

https://www.kaggle.com/tedllh/titanic-train

데이터 핸들링 - 판다스

우선 판다스에 대해 간단히 알아 보겠습니다.
월스트리트 금융회사의 분석전무가 웨스매티키(Wes McKinney)는 회사의 분석용 데이터 핸들링 툴이 마음에 들지 않아 판다스를 개발하게 되었다고 합니다.
판다스는 파이썬에서 데이터 처리에 가장 인기있는 라이브러리 중 하나로 대부분의 데이터 세트는 2차원 데이터인 행과 열로 구성됩니다.
파이썬의 리스트, 컬렉션, 넘파이 등의 내부 데이터 뿐만 아니라 CSV 파일 등을 쉽게 dataframe 으로 변경해 데이터의 가공/분석이 편리한 장점을 가지고 있습니다.

중요 객체

판다스에서는 아래와 같이 중요 객체를 사용하고 있습니다.

  • Index : RDBMS 의 PK 와 동일한 역할 (개별 데이터 고유식별)
  • Series : 인덱스를 Key 로 가지고 칼럼이 하나인 구조체
  • Dataframe : 인덱스를 Key 로 가지고 칼럼이 여러개인 구조체

파일을 데이터 프레임으로 로딩하는 API

판다스를 활용한 데이터 분석은 CSV파일을 통해 주로 이루어 지는데 아래와 같이 구분값에 따라 데이터를 로드할 수 있는 방안을 제공합니다.

  • read_csv() : 칼럼을 ',' 로 구분한 파일 포맷 변환
  • read_csv(sep='\t') : 탭으로 필드 구분된 파일 표맷 변환 가능
  • read_table() : 칼럼을 '\t' 로 구분한 파일 포맷 변환
  • read_fwf() : 고정 길이 기반의 칼럼 포맷 변환

그럼 파일을 불러와 보겠습니다.
주피터 노트북이 실행되고 있는 폴더에 "titanic_train.csv" 라는 파일이 있다고 가정하면 아래와 같이 파일을 로드하여 변수에 반환이 가능합니다.

import pandas as pd

titanic_df = pd.read_csv('titanic_train.csv')

# read_csv(r'c:\download\titanic_train.csv', sep=',') 형식으로 사용 할 수 있으나 주피터 노트북과 동일 경로에 파일이 존재하면 파일명만 입력가능

Dataframe 에서 특정 칼럼의 데이터를 반환

데이터 프레임에서 특정데이터를 반환하기 위헤서는 [] 연산자를 사용하며 연산자 안에 칼럼명을 입력하여 해당 칼럼데이터만 반환이 가능합니다.

(titanic_df['컬럼명'])

 

Value_Counts

[] 연산자를 사용하며 반환된 컬럼의 데이터 수량을 확인하고 싶다면 value_counts() 를 통해 데이터 별 수량 확인이 가능합니다.

titanic_df['컬럼명'].value_counts()

 

데이터 프레임에 새로운 칼럼 삽입

데이터프레임에 신규 칼럼을 추가할 때도 [] 연산자를 사용합니다.
아래와 같이 코드를 실행하면 DataFrame 에 신규 컬럼이 생성되면 컬럼 값은 모두 "0"으로 채워집니다.

# 새로운 칼럼을 추가하고 해당 칼럼에 데이터를 '0' 으로 할당 (기존데이터 프레임에 Series 가 추가됨)

titanic_df['Age_0']=0
titanic_df.head(3)

신규컬럼 추가 

신규컬럼을 생성할 때 기존 칼럼을 가공하여 새로운 칼럼을 추가 할 수도 있습니다.

# 기존 칼럼을 이용해 데이터를 가공하여 새로운 Series 를 생성가능

titanic_df['Age_by_10'] = titanic_df['Age']*10
titanic_df['Family_No'] = titanic_df['SibSp'] + titanic_df['Parch']+1
titanic_df.head(3)

 

데이터 프레임에 칼럼 삭제

drop() 메서드를 사용하면 데이터프레임에서 특정 칼럼 제거가 가능합니다.

데이터삭제 시 축을 기준으로 삭제하는데  axis=0 는 행 , axis=1 은 열을 의미합니다 

titanic_drop_df = titanic_df.drop('Age_0', axis=1 )
# axis = 1 은 칼럼을 의미, 'Age_0' 는 삭제할 칼럼명


titanic_df.drop([0,1,2], axis=0)
# axis = 0 은 로우를 의미, '[0,1,2]' 는 삭제할 로우

 

 

데이터 프레임 iloc[ ] ,  loc[ ] 연산자

데이터프레임에서 데이터를 추출하기 위해서는 iloc , loc 연산자를 사용하며

각각 숫자형 인덱싱. 문자형 인덱싱을 지원합니다. 

우선 데이터 추출을 하기 전에 새로운 데이터 프레임을 생성해 보겠습니다.

data = {'Name': ['Chulmin', 'Eunkyung','Jinwoong','Soobeom'],
        'Year': [2011, 2016, 2015, 2015],
        'Gender': ['Male', 'Female', 'Male', 'Male']
       }
data_df = pd.DataFrame(data, index=['one','two','three','four'])
print(data_df)

 

iloc숫자형 인덱스를 지원합니다.

아래의 코드를 실행하면 0번째 로우의 0번째 칼럼인 " Chulmin" 이 반환됩니다. 

#iloc(로우, 칼럼)
data_df.iloc[0, 0]

 

loc문자형 인덱스를 지원합니다. 

아래의 코드를 실행하면   'one' 인덱스 로우의 'Name' 칼럼을 반환하므로 위의 결과와 동일하게 " Chulmin" 이 반환됩니다. 

#loc(로우, 칼럼)
data_df.loc['one', 'Name']

 

여기까지 간단한 데이터프레임 활용방안에 대해 알아 보았습니다. 

다음 포스팅에서는 데이터 결손 처리에 관해 알아보도록 하겠습니다.