안녕하세요 BTC_1Tier팀의 One 입니다!
오늘은 Pandas 라이브러리를 활용하는법에 대해 알아보도록 합시다.
파이썬의 Pandas 라이브러리는 굉장히 많이 들어보셨을텐데요
Pandas는 데이터 조작 및 분석을 위한 파이썬 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리입니다.
수집된 데이터를 전처리를 하는 과정에서 사용되는 핵심적인 패키지라고 볼 수 있는데요.
판다스의 데이터프레임(DataFrame)을 활용하면 데이터를 표 형태로 처리할 수 있어서, 수집된 데이터의 전처리 등 각종 데이터 핸들링을 쉽고 편하게 할 수 있습니다.
데이터 프레임 (DataFrame)
데이터를 효과적으로 분석하는데 사용되는 테이블 형태의 데이터 구조입니다.
열과 행으로 구성된 2차원 배열로 생각할 수 있습니다.
데이터프레임은 표 형식의 데이터를 처리하는 데 매우 유용합니다.
각 열은 데이터의 특정 변수를 나타내며, 각 행은 해당 변수의 한 인스턴스를 나타냅니다.
데이터 프레임은 다양한 형태의 데이터를 저장할 수 있으며, 숫자, 문자, 논리값 등을 포함하는
여러 데이터 타입을 지원합니다.
데이터프레임은 데이터를 로드하고 저장하는 데 사용되는 다양한 파일 형식 (예: CSV, Excel, SQL 등)과 함께 작동합니다.또한 데이터의 필터링, 정렬, 그룹화, 집계, 결합 및 변환과 같은 다양한 데이터 조작 작업을 수행하는 데 사용됩니다.
그럼 같이 데이터 프레임을 생성하고 활용을 해볼까요?
Pandas 설치
먼저 Pandas를 설치한 후 라이브러리를 import 해줍니다.
pip install pandas
import pandas as pd
데이터 프레임 생성
데이터 프레임 생성 또한 간단합니다.
저는 2022년의 학생 정보와 2023년의 학생 정보를 임의의 데이터를 넣어 데이터 프레임을 생성해보도록 하겠습니다.
df2022 = pd.DataFrame({
'학번' : [1000, 2000, 3000, 4000, 5000],
'성적' : ['A', 'B', 'C', 'A', 'F'],
'지도교수' : ['James', 'peter', 'jon', 'sara', 'michael']
})
df2023 = pd.DataFrame({
'학번' : [1000, 2000, 3000, 4000, 5000],
'성적' : ['A', 'B', 'F', 'A', 'A'],
'지도교수' : ['James', 'peter', 'jon', 'sara', 'michael']
})
데이터 프레임 비교하기
2022년의 학생 정보와 2023년의 학생 정보 중 달라진 점이 뭔지 궁금하지 않으신가요?
일일이 비교하여 구할 수도 있겠지만, 저희한텐 Pandas가 있습니다.
먼저 두개의 데이터 프레임의 동일 여부를 판단해봅시다.
df2022.equals(df2023)
False
다른 점이 있다는 건 확인했는데요, 그렇다면 어떤 점이 다른지 확인해볼까요?
Pandas를 이용해 두 데이터 프레임의 다른점을 확인하는 방법에는 여러가지가 있습니다.
(1) 데이터를 병합 한 후 중복 행을 제거하는 방법
drop_duplicates : 데이터 프레임에서 중복을 제거하는 함수
df_diff = pd.concat([df2022,df2023]).drop_duplicates(keep=False)
print(df_diff)
두개의 데이터 프레임을 병합한 후에 중복을 제거하는 방법입니다.
위의 코드를 실행하면 다음과 같은 결과가 나옵니다.
학번 성적 지도교수
2 3000 C jon
4 5000 F michael
2 3000 F jon
4 5000 A michael
특정 행만 남기게 지정을 할 수 있습니다.
아래의 코드를 실행하여, 인덱스를 기준으로 가장 앞에 있는 행만 남게 할 수도 있습니다.
df_diff.drop_duplicates(['학번'], keep = 'first')
학번 성적 지도교수
2 3000 C jon
4 5000 F michael
keep 옵션에 last를 넣으면 인덱스를 기준으로 가장 마지막에 있는 행만 남겠죠?
보고 싶은 데이터프레임을 기준으로 잘 활용하면 될 것 같습니다.
(2) 데이터프레임의 다른 부분을 반환
데이터 프레임의 다른 부분을 반환하는 과정은 다음과 같습니다.
1. 데이터 프레임 병합
2. 기존 Index 초기화
3. 인자로 주어진 Column, Values 들의 만들어질 수 있는 모든 경우를 구함
4. 그 경우에 해당하는 Row의 Index를 Dictionary 형태로 반환
5. Value의 길이가 1개 = Data를 가지고 있는 row가 1개 밖에 없음 = 데이터 프레임의 다른 부분
6. 데이터 프레임으로 추출
위의 과정을 함수로 만들어서 확인 해 볼까요?
def GetDifferences(df1, df2):
#데이터 병합 후 인덱스 초기화
df = pd.concat([df1, df2]).reset_index(drop=True)
'''모든 경우를 구하고 해당하는 인덱스를 딕셔너리 형태로 반환
길이를 비교하여 데이터 프레임의 다른 부분을 구함'''
idx = [diff[0] for diff in df.groupby(list(df.columns)).groups.values() if len(diff) == 1]
#데이터 프레임으로 추출
return print(df.reindex(idx))
df.reindex : 데이터프레임에 직접 영향을 주지 않고, 새로운 데이터 프레임을 반환하는 함수
자 그러면 함수를 실행 해봅시다.
GetDifferences(df2022,df2023)
학번 성적 지도교수
2 3000 C jon
7 3000 F jon
9 5000 A michael
4 5000 F michael
원하는 결과가 의도대로 잘 나오는 모습을 확인 할 수 있습니다.
위와 같이 Pandas 라이브러리를 활용하여 데이터프레임을 비교하는 과정을 진행해보았습니다.
저는 예제 데이터를 사용하여 아주 간단한 코드를 실행해보았는데요
사실 Pandas를 활용하여 데이터를 전처리하는 방법은 굉장히 무궁무진하고 다양한 방법이 있습니다.
제가 경험해본 결과 어떻게 활용하는가에따라서 결과값이 다르게 나오기도 했습니다.
원천 데이터에 문제가 있는 경우도 있었구요,
그래서 데이터를 검증하는 과정이 꼭 필요할 것 같습니다.
그럼 다음 시간에 만나요
베바👋
'Programming > Python' 카테고리의 다른 글
Streamlit - Kaggle DALYs 데이터 분석 & 시각화 - 1 (0) | 2023.08.16 |
---|---|
Streamlit이란? (0) | 2023.08.04 |
pandas를 활용한 boto3 (0) | 2023.06.14 |
예제로 알아보는 boto3 (0) | 2023.06.02 |
ChatGPT와 Slack 연동 (1) | 2023.05.17 |
댓글