본문 바로가기

Data & MarTech/Data Analysis

[Pandas] CSV 파일 합치기 및 정제하기

반응형

[Pandas] CSV 파일 합치기 및 정제하기


들어가며

동일한 스키마를 가진 CSV 파일이 여러개인 경우가 있어 판다스 데이터프레임(Pandas DataFrame)을 이용해 파일을 합친 다음 정제하는 과정이 필요할 경우 본 포스트내용을 참고하시기 바랍니다.

CSV 처리를 위한 Pandas 상세 설명

Python 환경설정

virtualenv 생성 및 활성화

# 가상환경 생성
virtualenv venv

# 가상환경 실행
source venv/bin/activate

jupyter notebook 설치

pip install jupyter

pandas 라이브러리 설치

pip install pandas

Pandas 개발

CSV 파일 조회

  1. 합칠 파일을 배열에 추가합니다. 
  2. 루프에서 각 csv_file을 읽은 다음 새로운 DataFrame으로 할당하여 새로운 배열(dfs)에 추가합니다.
  3. Pandas concat을 이용해 앞에서 읽은 3개의 CSV파일을 합칩니다.
    1. axis=0(행방향)으로 합치고 ignore_index=True 속성을 추가하여 CSV index가 합친 순서에 따라 생성되도록 합니다. 예를 들어 CSV파일 A,B,C가 각각 3개의 행이 있으면 합칠 경우 index가 0,1,2,0,1,2,01,2로 반복되는 것이 보이는데 ignore_index를 하면 0,1,2,3,4,5,6,7,8로 카운트되는 것을 확인할 수 있습니다.
import pandas as pd

csv_files = [
	'./origin/sample_historical_install.csv',
    	'./origin/sample_historical_install_2.csv',
    	'./origin/sample_historical_install_3.csv'
]

dfs = []
for i, file in enumerate(csv_files):
    df = pd.read_csv(file)
    dfs.append(df)
    
merged_df = pd.concat(dfs, axis=0, ignore_index=True)

파일 합치기(merge files)

합친 데이터를 CSV로 파일 추출하기

to_csv 함수를 이용해 파일을 합친 후 CSV 파일로 추출합니다. index=False를 추가하여 첫번째 컬럼에 생성되는 index 번호를 제거합니다.

merged_df.to_csv('./output/merged_install.csv', index=False)

데이터 정제하기

컬럼 추가하기
# 컬럼 추가하기(Adding columns)
df['android_id'] = ''
df['user_id'] = ''

# 데이터 확인(Checking data)
df.head(5)
컬럼명 변경: rename
# rename columns
df = df.rename(columns={'platform': 'os'})

# check data
df.head(5)
특정 컬럼값 확인

위 샘플의 경우 app_name 컬럼값이 TestApp, TestApp2, TestApp3와 같이 다르게 되어 있습니다. 특정 컬럼의 경우 하나의 값만 존재해야 하는 경우가 있어 Pandas 기능을 활용하여 데이터를 조회합니다.

# 조건절 추가하여 데이터 조회(Query data with a specific condition)
df[df['app_name'] != 'SingularTestApp']

# 여러 조건을 추가하여 조회할 경우(Query data with multiple conditions)
df[(df['app_name'] != 'TestApp1') & (df['app_name'] != 'TestApp2')]
데이터 일괄 변경
# 컬럼값 업데이트(Update a specific column data)
df.loc[df['app_name'] != 'SingularTestApp', 'app_name'] = 'SingularTestApp'

# 데이터 확인(Checking data)
df[df['app_name'] != 'SingularTestApp']

마치며

원본 파일을 사용가능한 형태의 데이터로 가공하기 위해서 케이스에 따라 판다스(Pandas)에서 제공하는 함수기능을 활용할 수 있습니다. 해당 예시 케이스의 경우 데이터상에 동일한 파일 내에 앱 이름이 동일하지 않아 전처리과정에서 파일이름을 특정명으로 통일시키고 특정 스키마 구조에 맞추기 위해 컬럼을 추가한 다음 빈값으로 채우도록 구현하였습니다. 데이터를 변경할 일이 많을 경우 Pandas 사용법을 익혀두시면 많은 도움이 될 수 있습니다. 읽어주셔서 감사합니다.

참고자료

Data Preprocessing with Python Pandas
 

Data preprocessing with Python Pandas — Part 1 Missing Data

This tutorial explains how to preprocess data using the pandas library. Preprocessing is the process of doing a pre-analysis of data, in…

towardsdatascience.com

 

반응형

'Data & MarTech > Data Analysis' 카테고리의 다른 글

[데이터시각화] Matplotlib - Ticks 적용하기  (0) 2017.07.27