카테고리 없음

[기술 블로그 04] 깔끔한 데이터와 apply()

quiet-ocean 2026. 5. 9. 22:38

벌써 4번째 기술블로그~


<목차>

1. 깔끔한 데이터 만들기 1

2. 깔끔한 데이터 만들기 2

3. apply() with 람다 함수


1. 깔끔한 데이터 만들기 1

책에서 제공하는 pew.csv 파일을 이용해서 실습해볼꺼니까..

import pandas as pd
pew = pd.read_csv('../data/pew.csv')

판다스에 파일을 먼저 불러와준 후에...

데이터셋을 살펴보면,
일부 열 이름이 변수가 아닌 값을 나타낸다는 것을 알 수 있다.

religion을 제외한 모든 열은 소득 범위를 나타내고, 각 소득 범위에 해당하는 사람의 수를 값으로 설정했다고 볼 수 있다. 

=> 변수 '소득'을 여러 범위로 나눠서 여러 열로 분산시켰다는 것이다. 

 

변수 하나를 여러 개의 열로 표현한 데이터를 'wide data'라 하고, 한 개의 열로 표현한 데이터를 'long data'라 하자.

wide data를 long data로 만들려면 프레임을 변환하는 unpivot, 피벗 되돌리기 작업이 필요하다.

 

 

<melt() 매서드>

판다스의 데이터프레임에는 깔끔한 데이터 형식으로 변환하는 melt() 매서드가 존재한다.

4가지 매개변수를 지정해야 하는데...

id_vars 그대로 유지할 변수를 나타내는 컨테이너(리스트, 튜플, ndarray)
value_vars unpivot 할 열을 나타냄. 기본적으로 id_vars로 지정하지 않은 모든 열.
var_name unpivot 한 열의 이름을 값으로 하는 새 열의 이름을 나타냄. 기본값은 'variable'
value_name var_name 열의 값을 나타내는 새로운 열의 이름 문자열. 기본값은 'value'

흠.... 이렇게 설명으로만 쓰니까 너무 어려워보임....

id_vars="religion" / religion 열만 남긴다. 

var_name="income" / unpivot할 열의 이름을 설정

value_name="count" / unpivot할 열들에 원래 있던 값들을 나타내는 이름

머 이정도...?

 

 

위에서는 하나의 열만 유지했었으니까 이번엔 2개 이상의 열을 남겨보는 걸 해볼거에요~

이번엔 다른 데이터셋 billboard.csv를 불러오겠어.

데이터셋을 살펴보면,, 

year(연도), track(곡), time(재생시간), date.entered(발매일), 각 주들이 있다...

 생각을 해보자. 어떤 열을 unpivot해야 데이터가 깔끔해질까???

바로 wk1, wk2 ...... 얘네들이다. 

이런식으로!!!! 하면 좀 깔끔한 데이터가 만들어진 거 같기도////?

 

 

2. 깔끔한 데이터 만들기 2

내용이 생각보다 많아서 목차를 나눠보앗다..

이번엔 에볼라 데이터셋을 활용해볼 차례~!

ebola = pd.read_csv('../data/country_timeseries.csv')


데이터셋 열 이름 확인
 


'Date'랑 'Day'만 제외하고 정리
variable을 보면, Case_국가, Deaths_국가 형태임. 밑줄 앞은 사례, 뒤는 국가이므로 밑줄 기준으로 분할하면 좋을 듯...?

variable_split = ebola_long.variable.str.split('_')

분할했으면 분할한 값을 새로운 열로 할당해야겠지요??
리스트 각 값에 접근할려면 get() 이용해야됨!

status_values = variable_split.str.get(0)
country_values = variable_split.str.get(1)

이런식으로...!


원하는 시리즈 완성했으니까
데이터프레임에 추가하고 출력해주면 
끝!!

 

 

3. apply() with 람다 함수

apply()매서드로 많은 걸 할 수 있지만, 그 중에 람다 함수를 사용하는 코드를 소개해 보겠다. 

왜냐?

교수님이 내주신 과제에 lambda써야되는게 있었는데, 내가 필요성을 못 느꼈어서... 이번에 제대로 느껴보고자...ㅎ...

일단 예시를 먼저 살펴보는게 이해가 빠를 것이다.

 

간단한 데이터프레임과 함수를 만들어보면 

df = pd.DataFrame({'a': [10, 20, 30],
                   'b': [20, 30, 40]})                 
def my_sq(x):
    return x ** 2

 

데이터프레임과 함수를 사용해보면 

왼쪽 코드처럼 만든 함수를 사용할 수도 있지만, 제곱같이 간단한 함수는 lambda를 쓰면 간단하게 정리할 수 있다. 

따로 정의 안해도 되도록 하는 친구가 람다 함수이다. 

 

 


오늘은 여기까지. 안녕!