DataFrame의 column 값을 변환시키는 방법
1
   | df = pd.read_csv('korean-idol.csv')
  | 
 
  
 1. apply + 일반 함수
apply는 Series나 DataFrame에 좀 더 구체적인 로직을 적용하고 싶은 경우 활용한다
- apply를 적용하기 위해서는 함수가 먼저 정의되어야한다
 
- apply는 정의한 로직 함수를 인자로 넘겨준다
 
- 
Series에 적용할 경우:
df_name [ “col_name” ] .apply( func )
 
- 
DataFrame에 적용할 경우:
df_name .apply( func, axis = 1)
 
  
  
    
       | 
      이름 | 
      그룹 | 
      소속사 | 
      성별 | 
      생년월일 | 
      키 | 
      혈액형 | 
      브랜드평판지수 | 
    
  
  
    
      | 0 | 
      지민 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-10-13 | 
      173.6 | 
      A | 
      10523260 | 
    
    
      | 1 | 
      지드래곤 | 
      빅뱅 | 
      YG | 
      남자 | 
      1988-08-18 | 
      177.0 | 
      A | 
      9916947 | 
    
    
      | 2 | 
      강다니엘 | 
      NaN | 
      커넥트 | 
      남자 | 
      1996-12-10 | 
      180.0 | 
      A | 
      8273745 | 
    
    
      | 3 | 
      뷔 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-12-30 | 
      178.0 | 
      AB | 
      8073501 | 
    
    
      | 4 | 
      화사 | 
      마마무 | 
      RBW | 
      여자 | 
      1995-07-23 | 
      162.1 | 
      A | 
      7650928 | 
    
  
 
  
 1-1. (목표) ‘성별’ column의 “남자” / "여자"를 1 / 2로 바꾼다
변환 규칙:
남자: 1   여자: 2   기타: -1
(1) 로직 함수 정의
[주의] 반드시 return 값이 존재하여야한다
1 2 3 4 5
   | def male_or_female(x):     if x == "남자":         return 1     elif x == "여자":         return 2
   | 
 
  
(2) apply로 DataFrame에 적용
1
   | df["성별_NEW"] = df["성별"].apply(male_or_female)
   | 
 
  
    
       | 
      이름 | 
      그룹 | 
      소속사 | 
      성별 | 
      생년월일 | 
      키 | 
      혈액형 | 
      브랜드평판지수 | 
      성별_NEW | 
    
  
  
    
      | 0 | 
      지민 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-10-13 | 
      173.6 | 
      A | 
      10523260 | 
      1 | 
    
    
      | 1 | 
      지드래곤 | 
      빅뱅 | 
      YG | 
      남자 | 
      1988-08-18 | 
      177.0 | 
      A | 
      9916947 | 
      1 | 
    
    
      | 2 | 
      강다니엘 | 
      NaN | 
      커넥트 | 
      남자 | 
      1996-12-10 | 
      180.0 | 
      A | 
      8273745 | 
      1 | 
    
    
      | 3 | 
      뷔 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-12-30 | 
      178.0 | 
      AB | 
      8073501 | 
      1 | 
    
    
      | 4 | 
      화사 | 
      마마무 | 
      RBW | 
      여자 | 
      1995-07-23 | 
      162.1 | 
      A | 
      7650928 | 
      2 | 
    
  
 
  
 1-2. (목표) cm당 브랜드 평판지수를 구한다 (브랜드평판지수 / 키)
변환 규칙:
키: 178  브랜드평판지수: 99000
값: 99000 / 178
(1) 로직 함수 정의
1 2 3
   | def cm_to_brand(df):     value = df["브랜드평판지수"] / df["키"]     return value
   | 
 
  
(2) apply로 DataFrame에 적용
1
   | df.apply(cm_to_brand, axis = 1)
   | 
 
0     60617.857143
1     56027.949153
2     45965.250000
3     45356.747191
4     47198.815546
5     29260.308989
6     27371.321997
7              NaN
8     25503.950893
9     24156.128067
10             NaN
11    19158.617486
12    18866.594286
13    18603.051136
14    16812.885057
dtype: float64
 
 
 2. apply + lamda 함수
df_name [ “col_name” ] .apply (lambda_func)
- lambda는 1줄로 작성하는 간단 함수식이다
 
- return을 별도로 멱기하지 않는다
 
  
(1) male_or_female 함수
1
   | male_or_female = lambda x: 1 if x == "남자" else 0
   | 
 
1
   | df["성별"].apply(male_or_female)
   | 
 
0     1
1     1
2     1
3     1
4     0
5     1
6     1
7     0
8     1
9     1
10    0
11    1
12    1
13    1
14    1
Name: 성별, dtype: int64
  
(2) 실제로는 간단한 계산식을 적용하려는 경우에 많이 사용한다
1
   | df["키/2"] = df["키"].apply(lambda x: x / 2)
   | 
 
  
    
       | 
      이름 | 
      그룹 | 
      소속사 | 
      성별 | 
      생년월일 | 
      키 | 
      혈액형 | 
      브랜드평판지수 | 
      성별_NEW | 
      키/2 | 
    
  
  
    
      | 0 | 
      지민 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-10-13 | 
      173.6 | 
      A | 
      10523260 | 
      1 | 
      86.80 | 
    
    
      | 1 | 
      지드래곤 | 
      빅뱅 | 
      YG | 
      남자 | 
      1988-08-18 | 
      177.0 | 
      A | 
      9916947 | 
      1 | 
      88.50 | 
    
    
      | 2 | 
      강다니엘 | 
      NaN | 
      커넥트 | 
      남자 | 
      1996-12-10 | 
      180.0 | 
      A | 
      8273745 | 
      1 | 
      90.00 | 
    
    
      | 3 | 
      뷔 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-12-30 | 
      178.0 | 
      AB | 
      8073501 | 
      1 | 
      89.00 | 
    
    
      | 4 | 
      화사 | 
      마마무 | 
      RBW | 
      여자 | 
      1995-07-23 | 
      162.1 | 
      A | 
      7650928 | 
      2 | 
      81.05 | 
    
  
 
  
apply에 함수식을 만들어서 적용해주는 것과 동일하기 때문에, 복잠한 조건식은 <함수>로, 간단한 계산식은 < lambda > 로 적용하면 된다
 3. map + map 함수
df_name [ “col_name” ] .map ( map_func )
Step 1: dictionary 형식으로 map 함수를 정의하기
Step 2: DataFrame / Series에 map 함수를 적용
  
  
    
       | 
      이름 | 
      그룹 | 
      소속사 | 
      성별 | 
      생년월일 | 
      키 | 
      혈액형 | 
      브랜드평판지수 | 
      성별_NEW | 
      키/2 | 
    
  
  
    
      | 0 | 
      지민 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-10-13 | 
      173.6 | 
      A | 
      10523260 | 
      1 | 
      86.80 | 
    
    
      | 1 | 
      지드래곤 | 
      빅뱅 | 
      YG | 
      남자 | 
      1988-08-18 | 
      177.0 | 
      A | 
      9916947 | 
      1 | 
      88.50 | 
    
    
      | 2 | 
      강다니엘 | 
      NaN | 
      커넥트 | 
      남자 | 
      1996-12-10 | 
      180.0 | 
      A | 
      8273745 | 
      1 | 
      90.00 | 
    
    
      | 3 | 
      뷔 | 
      방탄소년단 | 
      빅히트 | 
      남자 | 
      1995-12-30 | 
      178.0 | 
      AB | 
      8073501 | 
      1 | 
      89.00 | 
    
    
      | 4 | 
      화사 | 
      마마무 | 
      RBW | 
      여자 | 
      1995-07-23 | 
      162.1 | 
      A | 
      7650928 | 
      2 | 
      81.05 | 
    
  
 
1 2 3 4
   | my_map = {     "남자": "male",     "여자": "female" }
  | 
 
0       male
1       male
2       male
3       male
4     female
5       male
6       male
7     female
8       male
9       male
10    female
11      male
12      male
13      male
14      male
Name: 성별, dtype: object