wPython에서 pandas pkg를 이용하여 Dataframe 작업을 할 때 열 생성/변경/삭제 작업이 많다.
단순한 열 생성/변경/삭제 작업의 경우 간단하지만, 다수 개의 조건하에 있는 열 변경 작업은 생각이 조금 필요하다.
오늘 원소 값 변경을 위해 삽질을 여러 번 하다가.. 발견한 조건에 따른 원소 값 변경 코드를 정리해본다.
1. Dataframe 생성
original dataframe으로 Name, Gender 열을 가진 간단한 df를 생성했다. 이후에는 새로운 열을 생성하고, 그 열에 대한 원소값을 변경할 것이다.
a = pd.DataFrame({'Name':['Jane','Young','Tester','Tester2'],'Gender':['man','woman','woman','man']})print('***** original dataframe *****')print()print(a)
2. 조건에 따른 Dataframe에 새로운 Column 생성
나는 python의 loc 와 str.contains 함수를 사용할 것이므로, 이것을 먼저 간단하게 알아보고 넘어간다.
x.loc: label(값)을 이용하여 values 그룹에 접근(indexing)하는 것.
아래 예시(Example)과 같이 label(값 = viper)에 따른 값들을 출력해주는 method이다.
str.contains: string에서 아주 유용한 함수로, 인자값에 따른 문자열을 찾아준다.
예를들어, a={"장미꽃", "꽃집", "배꽃나무", "매화는 매실의 꽃", "가나다", "abc", "꽂", "꼽", "꽁", "꼿꼿"} 라는 배열에서 a.str.contains("꽃")을 실행하면 "꽃"을 포함한 모든 단어를 출력할 수 있다.
즉, '기업명' 이라는 열에서 'xx전자'라는 이름을 가진 기업명을 찾아 '업무분야' 라는 카테고리를 새로 만든 후, '전자'라는 값을 삽입한다고 치자. 그럴 경우 기업명엔 '삼성전자', 'LG전자', 'ABC전자'등 많은 값이 있을 지라도 이 분류는 '전자'로 처리될 수 있다.
그러면 이제 나의 예시에서 loc와 contains method를 함께 사용해본다.
a.loc[a['Gender'].str.contains("wo")]) # a['Gender']열에서 "wo"가 포함된 값의 grp을 찾는다.
그 결과값으로 1, 2번 값들이 출력된다.
그러면 이제 해당 값("wo")을 가진 그룹에 'category'라는 column을 추가하여 '여자'라는 값을 생성한다.