본문 바로가기
[파이썬]/데이터 분석

판다스를 활용한 데이터프레임 데이터 추출 및 컬럼명 변경

by sung min_Kim 2023. 12. 3.

 본 글에서는 "데이터프레임 데이터 추출 및 컬럼명 변경"에 관한 내용을 다룰 것이다. 컬럼명이 영문명인 데이터프레임을 한글명으로 변환할 것이다. 이는 편의성을 향상하기 위한 목적이다. 차례와 사용 툴은 아래와 같다.

 [차례]
 첫 번째, 사용할 데이터 호출하기
 두 번째, 메타정의서(컬럼정의서)를 통해 컬럼명을 담는 객체 생성하기

 세 번째, 해당 객체로부터 데이터 추출
 네 번째, 추출한 데이터를 기존 테이터프레임에 저장하기

 [사용 툴]
- Jupyter notebook(웹 기반 대화형 코딩 환경)


. 데이터 호출하기


 글쓴이는 "포항시 BIS 교통카드 사용내역 데이터"를 국가 교통 데이터 오픈마켓에서 수집하여, 이를 활용하고자 한다.
 판다스 라이브러리에서 제공하는 함수 'pd.read_csv'를 사용해 위 파일의 경로와 이름을 매개변수로 두어 데이터프레임 객체를 생성한다. 이렇게 생성된 데이터프레임 객체 'df_bus_card_org'는 시리즈(series) 형태의 데이터를 가지며, 각 시리즈의 키는 열의 이름, 값은 열의 값이 된다.


import pandas as pd

file_path = "./01_data/org/trfcard(0)/trfcard.csv"
df_bus_card_org = pd.read_csv(file_path)
df_bus_card_org.head(1)


 위의 코드를 실행한 결과, 아래와 같이 컬럼의 이름을 영문명으로 갖는 데이터프레임 객체인 것을 확인할 수 있다.

저장된 파일로부터 데이터 조회

 


 (결측치, 이상치에 대한 검사 단계는 이 글에서 작성하지 않고, 컬럼명을 바꾸는 데에 초첨을 두도록 하겠다.)

 


· 메타정의서(컬럼정의서)에 정의된 컬럼명을 담는 객체 생성하기


 메타정의서(컬럼정의서)에 정의된 데이터들이다. 본인은 컬럼명을 수정하기 위해 컬럼명에 해당하는 데이터를 담는 데이터프레임 객체를 생성할 것이다.

 

메타정의서(컬럼정의서)

 

import pandas as pd

file_path = "./01_data/org/trfcard(0)/trfcard_columns.xlsx"

df_bus_card_col_org = pd.read_excel(file_path,
                                    header = 2,
                                    usecols="B:C")​


 판다스 라이브러리의 'pd.read_excel' 함수를 사용해, 위 메타정의서(컬럼정의서)의 경로와 파일명이 저장된 변수 'file_path'를 매개변수로 두어 데이터프레임 객체 'df_bus_card_col_org'를 생성한다.

 이때, 'header=2'와 'usecols="B:C"'라는 생성 조건을 사용한다. 여기서 'header=2'는 열 이름으로 세 번째 행(인덱스 '2')을 사용하겠다는 것을 의미하고, 'usecols="B:C"'는 데이터프레임에 'B ~ C' 범위의 열을 포함시키겠다는 것을 의미한다.

 

 위 코드를 실행하여 생성된 데이터프레임 객체 'df_bus_card_col_org'의 상위 5개 데이터를 조회하였다. 생성 조건 중, 'header=2'(인덱스 2)를 통해 데이터프레임의 컬럼명이 '컬럼명(영문)', '컬럼명(한글)'로 지정되었고, 'usercols="B:C"를 통해 'B ~ C' 열의 데이터가 각 각의 열에 나열된 것을 볼 수 있다. 

 생성한 데이터프레임의 데이터 유형은 일반적으로 시리즈(series)이다. 시리즈는 판다스의 주요 데이터 구조 중 하나로, 데이터프레임의 한 열을 나타내는 1차원 배열이다. 각 시리즈는 고유한 이름(또는 라벨)을 가지며, 이는 데이터프레임의 열 이름과 같다. 위의 데이터프레임으로 예를 들면, 열의 이름으로 사용된 '컬럼명(영문)'과 '컬럼명(한글)'이 시리즈 타입으로서, 해당 이름을 통해 열이 가진 데이터를 확인할 수 있다.

시리즈 이름을 통한 데이터 조회


 이는 기존 데이터프레임 'df_bus_card_org'의 컬럼명을 바꾸는 데 사용할 데이터이므로, 키와 값을 갖는 딕셔너리(dict) 유형으로 형 변환을 해주도록 하자.

 


· 해당 객체로부터 데이터 추출하여 컬럼명 변경하기


 기존 데이터프레임의 컬럼명을 한글명으로 바꾸기 위해 생성한 데이터프레임 객체의 데이터 유형을 시리즈(series)에서 딕셔너리(dict)로 형 변환하여 준다. 딕셔너리 타입의 데이터는 키(key)와 값(value)을 가지는데, 여기서 ''는 변경하려는 컬럼의 기존 이름이고, ''은 변경하려는 새로운 이름으로 매핑된다.

 우선 'df_bus_card_col_new_dict'라는 이름의 빈 딕셔너리를 생성하고, 'df_bus_card_col_org'에서 열 데이터를 추출하여 생성한 딕셔너리에 저장한다.
 이후에 'rename()' 함수를 사용하면, 기존 데이터프레임 'df_bus_card_org'의 컬럼명을 딕셔너리의 'value' 값(승차시간, 하차시각, ...)으로 지정할 수 있을 것이다.

 

df_bus_card_col_new_dict = {}

for k,v in zip(df_bus_card_col_org.iloc[:,0], df_bus_card_col_org.iloc[:,1]) :
    df_bus_card_col_new_dict[k] = v


 위 코드를 실행하면, 'df_bus_card_org' 데이터프레임의 첫 번째 열(iloc[:,0])두 번째 열(iloc[:,1])의 데이터를 순차적으로 순회하면서 새로운 딕셔너리를 생성한다.

 'df_bus_card_col_org.iloc[:,0]',  'df_bus_card_col_org.iloc[:,1]' 이 부분은 'df_bus_card_col_org' 데이터프레임의 첫 번째 열과 두 번째 열의 각 행에서 값을 순차적으로 추출하여 k와 v에 할당하고 있다. 이때 'zip()' 함수는 첫 번째 열과 두 번째 열의 값을 순서대로 묶어주는 역할을 수행한다.

 'df_bus_card_col_new_dict[k] = v' 구문은 추출한 값 중, 'k'를 키로, 'v'를 값으로 하는 항목을 'df_bus_card_col_new_dict' 딕셔너리에 추가하고 있다.

 'df_bus_card_col_new_dict'는 이 과정을 통해, 'df_bus_card_org' 데이터프레임의 첫 번째 열의 값들을 '키(key)'로, 두 번째 열의 값들을 '값(value)'으로 하는 딕셔너리로 생성된다.

 

새로운 딕셔너리 객체 생성


 판다스에서 'iloc[]'는 정수 기반의 인덱싱을 의미한다. 'iloc[:,0]'은 모든 행(:)의 첫 번째 열(0)을 선택하는 것이고, 'iloc[:,1]'은 모든 행(:)의 두 번째 열(1)을 선택하는 것이다. 이러한 방식으로 특정 열의 데이터를 선택할 수 있다.

 


· 추출한 값을 저장한 딕셔너리를 활용하여 컬럼명 변경하기


 이제 'rename()' 함수를 사용해서 위의 딕셔너리 객체를 이용한 기존의 데이터프레임 'df_bus_card_org' 컬럼명을 변경해 주도록 하자.

 

df_bus_card_org.rename(columns=df_bus_card_col_new_dict, inplace=True)

df_bus_card_org.head()


 'rename()' 함수는 판다스 데이터프레임의 행 또는 열의 이름을 변경하는 데 사용된다. 위의 코드는 'df_bus_card_org' 데이터프레임의 열 이름을 'df_bus_card_col_new_dict' 딕셔너리에 정의된 대로 변경하는 작업을 수행한다.

 'rename()' 함수는 이런 딕셔너리 타입의 객체를 매개변수로 사용하여 기존의 컬럼명(키)을 새로운 컬럼명(값)으로 변경한다. 따라서 키(key)에 해당하는 기존의 열 이름을 값(value)으로 변경하게 된다.


 'inplace=True' 구문은 변경 사항을 원본 데이터프레임에 바로 적용하겠다는 것을 의미한다. 즉, 변경사항을 메모리에 저장하는 역할을 수행한다.

 

컬럼명 변경(영문=>한글)


 위 코드를 실행한 결과이다. 기존의 영문명이었던 컬럼명이 한글명으로 변환된 것을 볼 수 있다. 이제 이 데이터프레임은 한글로 된 컬럼명을 가지므로, 한글로 데이터를 분석하거나 처리하는데 더 용이해질 것이다.

 



판다스 데이터프레임에서 데이터를 추출할 때는 'iloc[]' 함수를 사용한다.
이 함수는 정수 기반의 인덱싱을 통해 특정 열의 데이터를 선택할 수 있다.

컬럼명을 변경할 때는 'rename()' 함수를 사용한다.
이 함수의 매개변수로는 변경할 컬럼명을 딕셔너리 형태로 지정한다.
딕셔너리는 기존 컬럼명을 키(key)로, 새로운 컬럼명을 값(value)으로 가진다.

또한, 'inplace=True' 구문을 인자로 사용하면,
변경 사항을 원본 데이터프레임에 바로 적용
할 수 있다.

이를 통해 메모리에 변경 사항을 저장하게 된다.

따라서 판다스 데이터프레임에서 데이터를 추출하고 컬럼명을 변경하는 과정은 데이터 타입에 주의해야 한다.
특히 딕셔너리를 사용하여 컬럼명을 변경할 때는 키와 값의 데이터 타입이 일치하는지 확인해야 한다.