반응형
[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 파일 조회
- 합칠 파일을 배열에 추가합니다.
- 루프에서 각 csv_file을 읽은 다음 새로운 DataFrame으로 할당하여 새로운 배열(dfs)에 추가합니다.
- Pandas concat을 이용해 앞에서 읽은 3개의 CSV파일을 합칩니다.
- 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)
합친 데이터를 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 & MarTech > Data Analysis' 카테고리의 다른 글
[데이터시각화] Matplotlib - Ticks 적용하기 (0) | 2017.07.27 |
---|