본문 바로가기

Skill Sets/Python

[python/pandas] 판다스(pandas) 활용한 데이터 전처리(2)

SMALL

안녕하세요! 데코입니다!

오늘은 빅데이터분석기사(빅분기) 실기를 공부하면서

알아두면 좋을 데이터 전처리에 대하여 포스팅하려고 합니다!

(출처 : https://www.datamanim.com/dataset/99_pandas/pandasMain.html)

 

출처에 있는 "1.2 데이터 전처리 100문제"를 python과 pandas를 활용해 풀면서

제가 잘 활용 안 하던 전처리 내용을 설명하려고 해요!

바로 시작하겠습니다! :)

 


# 4. dataframe에서 중복 제거하고 첫번째/마지막 케이스 남기기(drop_duplicates 이용)

DataFrame에서 중복하는 값을 제거해서 보는 경우가 있어요!

저와 같은 경우에는 '사용자'와 같은 PK값을 기준으로 중복된 행을 제거하고

데이터를 살펴보는 경우가 있어요!

 

Pandas의 DataFrame 객체에 대해서 drop_duplicates() 메서드를 사용하면, 

해당 데이터프레임에서 중복된 행을 제거할 수 있습니다!

 

여기서 중복된 데이터를 제거하고 어떤 행을 남길지 선택하는 것이 이 문제인데요!

keep 옵션을 통해서 지정해 줄 수 있어요!

 

keep='first'를 사용하면 중복된 행 중 첫 번째 행만 남기고 나머지 중복 행은 제거합니다. 
(DataFrame에서 가장 먼저 등장한 중복 행만 남겨져요!)

keep='last'를 사용하면 중복된 행 중 마지막 행만 남기고 나머지 중복 행은 제거합니다. 
(DataFrame에서 가장 마지막에 등장한 중복 행만 남겨져요!)

 

# 데이터 불러오기
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv'
DF = pd.read_csv(DataUrl)

# [33] df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, 
#      item_name를 기준으로 중복행이 있으면 제거하되 첫번째 케이스만 남겨라
DF[DF['item_name'].isin(['Steak Salad','Bowl'])]['item_name'].drop_duplicates(keep='first')

# [34] df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, 
#      item_name를 기준으로 중복행이 있으면 제거하되 마지막 케이스만 남겨라
DF[DF['item_name'].isin(['Steak Salad','Bowl'])]['item_name'].drop_duplicates(keep='last')

 

[33]과 [34]의 출력 결과는 아래와 같이 나와요!

 


# 5. dataframe에서 특정 문자열을 갖는 데이터만 인덱싱하기

SQL에서 데이터를 추출할 때 특정 문자열을 갖는 데이터를 조회하는 쿼리를 많이 작성하는데요!

당연히 python에서도 가능합니다!

 

[39-1]의 코드에 있는 str.contains 메서드는 정규식을 사용하여 문자열을 검색해요!
해당 문자열이 다른 단어와 결합되어 있는 경우에도 검색이 가능합니다.

[39-2]의 코드는 'choice_description' 열의 각 요소에 contains_black 함수를 적용하여
 'Black'이 포함된 행들만 필터링하는 코드입니다.
 

contains_black 함수는 문자열을 입력으로 받아 해당 

문자열에 'Black'이 포함되어 있는지 여부를 판단을 해요!

 

이를 통해 DataFrame에서 'Black'이라는 문자열만을 찾을 수 있습니다. 
이후 apply 메서드를 사용하여 각 행에 함수를 적용하여 인덱싱을 하게 됩니다!

[39-1과 [39-2] 코드는 동일한 결과를 나타내지만
[39-2]는 apply 메서드를 사용하여 각 행마다 함수를 적용하기 때문에 [39-1]보다 계산 속도가 느릴 수 있어요!

 

# 데이터 불러오기
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv'
DF = pd.read_csv(DataUrl)

# [39-1] DF의 데이터 중 choice_description 값에 Black이 들어가는 경우를 인덱싱하라 
DF[DF['choice_description'].str.contains('Black')]

# [39-2] DF의 데이터 중 choice_description 값에 Black이 들어가는 경우를 인덱싱하라
contains_black = lambda x: 'Black' in x
result = DF[DF['choice_description'].apply(contains_black)]

 

[39-1]과 [39-2]의 출력 결과는 아래와 같이 나와요!

 


# 3. dataframe에서 특정 컬럼 선택하기(DF.iloc이용)

저는 해당 문제를 "range(0,len(DF.columns),2)"를 사용하여 0부터 컬럼의 개수까지 2씩 증가하며 인덱스를 지정해 주고

 

이 인덱스를 iloc 속성에 사용하여 해당 인덱스의 컬럼만을 선택하도록 풀었는데!

 

정답과는 다르더라고요!

 

정답에서는 "::2"를 사용하여 0부터 컬럼의 개수까지 2씩 증가하며 인덱스를 지정해 주고

 

이 인덱스를 마찬가지로 iloc 속성에 사용하여 해당 인덱스의 컬럼만을 선택하였더라고요!

 

동일한 내용인데 다르게 표현이 되고

 

저에게는 덜 친숙해서 이렇게 기록해 봅니다! 

 

# 데이터 불러오기
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv'
DF = pd.read_csv(DataUrl)

# [30-1] df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라
DF.iloc[:,range(0,len(DF.columns),2)]

# [30-2] df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라
DF.iloc[:,::2]

 

[30-1]과 [30-2]의 출력 결과는 아래와 같이 나와요!

 

"::2"과 유사한 코드 아래에 적어둘게요!

DF.iloc[:,1::2] # 두 번째 컬럼부터 2씩 건너뛰며 컬럼을 선택하는 코드
DF.iloc[:,::3]  # 세 번째 컬럼부터 3씩 건너뛰며 컬럼을 선택하는 코드
DF.iloc[:,:10:2] # 0부터 9번째까지의 컬럼 중에서 2씩 건너뛰며 컬럼을 선택하는 코드

 


오늘은 빅데이터분석기사(빅분기) 실기를 공부하면서

 

python과 pandas를 이용한 데이터 전처리(2)에 대하여 포스팅하였습니다!

 

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분

 

그리고 더 궁금한 내용이 있다면

 

언제든지 댓글로 남겨주세요!

 

빠르게 궁금증을 해결해 드릴게요!

 

공감과 댓글은 큰 힘이 됩니다!

 

오늘도 블로그 방문해 주시고

 

포스팅 읽어주셔서 감사합니다!

 

다들 오류 없는 파이썬 코딩 해보아요!

 

빅데이터 분석기사 실기 공부도 화이팅입니다! :)

LIST