Pandas 활용 팁 정리 01
Intro
파이썬 라이브러리에서 판다스(Pandas)는 데이터 분석을 하기 위해 사용할 수 있는
유용한 라이브러리라고 말할 수 있다.
판다스는 데이터프레임(DataFrame)이라는 형식을 통해
데이터를 가공할 수 있다.
글을 본격적으로 서술하기 전에,
판다스는
import pandas as pd
라는 alias를 통해 pd
로 선언이 가능하다.
오늘 이 글에서는 판다스 라이브러리의 간단한 기능에 대해서 말해 볼 것이다.
01. csv파일 DataFrame으로 읽기(read_csv)
csv파일을 DataFrame으로 읽어 들이려면 다음과 같이 선언할 수 있다.
df = pd.read_csv("파일경로", encoding = 'utf-8')
read_csv의 기본 형식은 아래의 판다스 공식 페이지에서 확인할 수 있다.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
read_csv()
에서 encoding
파라미터의 경우, 기본값이 utf-8로 설정되어 있다.
low_memory
옵션의 경우 대용량의 데이터를 불러오는 경우, 칼럼별 데이터 타입을 추측하는데 많은
메모리 소비가 발생할 수 있기에, False
로 설정하는 것이 좋다.
특히 특정 컬럼에 NaN
값이 포함되어 있거나 여러 형태의 자료형이 섞여 있으면 DtypeWarning
이 발생하므로
이런 경우에도 low_memory
옵션을 False
로 설정하는 것이 좋다.
02. 서로 다른 데이터 프레임 결합하기(concat)
서로 다른 데이터 프레임을 결합하기 위해서는 concat()
을 사용해야 한다.
pd.concat([df1, df2], axis = 1)
concat
의 사용 예시는 다음과 같다.
concat
사용 시 주의해야 할 점은 결합할 데이터 프레임이 서로 같은 형태여야 한다는 것이다.
axis
옵션의 경우, 0 인 경우에는 데이터 프레임을 위 아래로 합치고,
1인 경우에는 데이터 프레임을 왼쪽 오른쪽으로 합친다.
찾아보니 join
옵션도 존재하는데 outer, inner
로 선언이 가능하고
outer
는 합집합, inner
는 교집합을 의미한다.
03. 데이터프레임 병합하기(merge)
merge
는 concat
과는 다르게 각 데이터 프레임에 존재하는 고유의 키 값을 중심으로
데이터 프레임을 병합하는 기능을 수행한다.(어떻게 보면 SQL의 join과 비슷한 기능인 것 같다.)
merge
의 사용예시는 다음과 같다.
result = pd.merge(df1, df2, on='id', how='left')
merge
의 기본적인 사용 옵션에는 on
과 how
가 존재하는데,
on
은 어떤 키를 중심으로 데이터 프레임을 합칠지를 의미하고,
how
는 어떤 방식으로 병합(join)을 수행할지를 의미한다.
how
의 옵션에는 left, right, outer, inner, cross
가 존재하며 디폴트 값은 inner
이다.
이 옵션은 SQL의 조인 방식을 선택하는 것과 비슷하다.
04. NaN값이 들어있는 특정 행, 열 지우기(dropna)
데이터프레임의 특정 행이나 열에 NaN
타입의 데이터가 있을 경우, 코드 실행 중에 오류가 발생할 수 있다.
이를 위해서 dropna
를 통해 NaN
값이 들어있는 행이나 열을 지울 수 있다.
사용예시는 다음과 같다.
df = df.dropna(axis = 0)
여기서 axis
를 0으로 선언하면 특정 행을 지우겠다는 의미이고,
1로 선언을 할 경우 특정 열을 지우는 것을 의미한다.
05. 데이터 프레임 자료형 변환(astype)
데이터 프레임을 만들었을 때, df.info()
를 사용하면 각 컬럼 별 데이터 형식을 알 수 있다.
이 때 데이터 분석의 목적에 맞게 데이터의 형식을 변환해야 할 경우가 생길 수 있는데,
이것을 위해 astype
을 사용할 수 있다.
astype
의 사용 예시는 다음과 같다.
df['A'] = df['A'].astype('int64')
이것은 A라는 열의 데이터 형식을 int64 타입으로 변환하는 것을 의미한다.
최근에 데이터 가공을 하다가 알게 된 사실인데,
데이터프레임은 Datetime이라는 날짜를 저장하는 자료형도 존재한다.
그런데 만약 날짜가 저장된 열을 datetime이라는 형식으로 변환해야 할 경우,
df['날짜'] = df['날짜'].astype('int').astype('str')
df['날짜'] = pd.to_datetime(df['날짜']) #날짜 datetime으로 변환
이런 방식으로 변환을 해야 변환을 잘 이루어졌다.
df['날짜'] = pd.to_datetime(df['날짜'], format='%Y%m%d',errors='raise')
참고로 내가 사용한 다른 방법은 이것인데, 이렇게 format
으로 년도, 월, 일을 지정할 수 있다.