안녕하세요! 데코입니다!
오늘은 빅데이터분석기사(빅분기) 실기를 공부하면서
알아두면 좋을 데이터 전처리에 대하여 포스팅하려고 합니다!
(출처 : 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)에 대하여 포스팅하였습니다!
설명이 어려운 부분 혹은 잘 이해가 안 가는 부분
그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해 드릴게요!
공감과 댓글은 큰 힘이 됩니다!
오늘도 블로그 방문해 주시고
포스팅 읽어주셔서 감사합니다!
다들 오류 없는 파이썬 코딩 해보아요!
빅데이터 분석기사 실기 공부도 화이팅입니다! :)
'Skill Sets > Python' 카테고리의 다른 글
[Python] 평균 구하기(프로그래머스/python/Level 1) (31) | 2023.07.23 |
---|---|
[python/pandas] 판다스(pandas) 활용한 데이터 전처리(3) (27) | 2023.05.21 |
[python/pandas] 판다스(pandas) 활용한 데이터 전처리(1) (30) | 2023.05.06 |
[python/numpy] 3차원 array를 dataframe으로 변환하는 방법 (42) | 2023.04.05 |
[Python/파이썬] Python내 logging을 통한 log 파일 남기기(코드 포함) (20) | 2023.02.19 |