챗GPT 활용/챗GPT를 활용한 파이썬 코딩

[파이썬 활용] 전화번호 전처리할 때 함수를 사용해서 간단하게?

최디터 2023. 3. 13.

위탁배송을 하는 마케터로서

네이버 스마트스토어센터에서 매일 [신규주문] 들어온 고객의 주문을 엑셀파일로 다운로드 받아

이를 편집하여, 여러 거래처에 발주를 넣고 있는데.

파이썬으로 방법을 찾고 있는 과정을 담은 글입니다.

 

스마트스토어, 쿠팡, 옥션, 지마켓, 11번가, 톡스토어 등등에서 생성된 각각의 신규주문 엑셀파일 컬럼명이 다릅니다.
1. df_all: 통합하여 사용할 컬럼만으로 구성한 데이터프레임을 먼저 생성.

2. df_ss, df_cp, df_ts, df_11, df_os, df_gm: 각 쇼핑몰 신규주문 엑셀파일을 각각의 데이터프레임 생성

  - 사용할 컬럼만 추려된 다음, 통합 데이터프레임의 컬럼명으로 바꿔준다. 

--- 생략 ---

다음은 

통합 데이터프레임 df_all에서  데이터 전처리 과정중 

전화번호 처리 방법

1. 전화번호를 문자열로

2. 전화번호 시작이 숫자로 인식하여 '010-1234-5678' 인 경우 '1012345670' 출력되는 경우

3. 공란은 '0'이 아닌 공란으로 남겨 두기.

 

세 가지 사항을 챗GPT를 통해 코딩하는 과정입니다.

 

✅ 전화번호는 숫자여서 맨 앞 '0'이 없어져 출력되는 것을 바로 잡아주라고 했는데

Python 전처리: 전화번호
df_all['수취인연락처2'] = df_all['수취인연락처2'].astype(str)
df_all['수취인연락처2'] = df_all['수취인연락처2'].apply(lambda x: '0' + x if x[0] != '0' else x)

✅ 공란에 '0'으로 출력되어 수정을 요청했더니,

❓질문: 아무값도 없을 경우 0을 출력하는데, 공란에는 0을 출력하지 않을려면?

🙋‍♂답변: 

아무 값도 없는 경우 공란에 해당하는 경우에는 "0" 대신에 빈 문자열("")을 출력하면 됩니다. 따라서 아래와 같이 수정하시면 됩니다.

Python 전처리: 전화번호
df_all['수취인연락처2'] = df_all['수취인연락처2'].astype(str)
df_all['수취인연락처2'] = df_all['수취인연락처2'].apply(lambda x: '0' + x if x and x[0] != '0' else x)

위 코드에서 x and x[0] != '0'x가 빈 문자열("")이 아니고, x의 첫 번째 문자가 '0'이 아닐 때만 '0'+x로 대체하도록 하기 위한 조건입니다. 따라서 x가 빈 문자열인 경우에는 '0'+x로 대체하지 않고 그대로 빈 문자열("")을 반환하게 됩니다.


  각쇼핑몰의 데이터프레임에서 컬럼이 없는 경우

❓질문: '수취인연락처2'컬럼이 없는 경우 어떻게 코드를 수정해야하는가?

🙋‍♂답변: 'str' object has no attribute 'apply' 오류를 방지하기 위해, 컬럼이 없는 경우에는 해당 코드 블록을 실행하지 않도록 if문으로 처리할 수 있습니다.

예를 들어, 다음과 같이 코드를 수정할 수 있습니다.

Python 전처리: 전화번호
# 구매자 연락처 전처리
df_all['구매자연락처'] = df_all['구매자연락처'].astype(str)
df_all['구매자연락처'] = df_all['구매자연락처'].apply(lambda x: '0' + x if x and x[0] != '0' else x)

# 수취인 연락처1 전처리
df_all['수취인연락처1'] = df_all['수취인연락처1'].astype(str)
df_all['수취인연락처1'] = df_all['수취인연락처1'].apply(lambda x: '0' + x if x and x[0] != '0' else x)

# 수취인 연락처2 전처리
if '수취인연락처2' in df_all.columns:
    df_all['수취인연락처2'] = df_all['수취인연락처2'].astype(str)
    df_all['수취인연락처2'] = df_all['수취인연락처2'].apply(lambda x: '0' + x if x and x[0] != '0' else x)

  위 코드를 함수로

❓질문:함수로 만들어 간단하게 할 수 있을까?

🙋‍♂답변:

 

네, 함수로 만들면 더 간단하게 처리할 수 있습니다. 다음은 함수로 전처리를 수행하는 코드 예시입니다.

Python 함수
 
def preprocess_phone_number(df, column):
    if column in df.columns:
        df[column] = df[column].astype(str)
        df[column] = df[column].apply(lambda x: '0' + x if x and x[0] != '0' else x)
    return df

df_all = preprocess_phone_number(df_all, '구매자연락처')
df_all = preprocess_phone_number(df_all, '수취인연락처1')
df_all = preprocess_phone_number(df_all, '수취인연락처2')

이렇게 함수로 만들면 전처리를 간단하게 적용할 수 있습니다. 함수에서는 데이터프레임과 처리할 열 이름을 인자로 받아 해당 열이 데이터프레임에 있는지 검사하고, 있을 경우 전처리를 수행합니다. 함수를 호출할 때는 처리할 모든 열 이름을 지정하여 호출하면 됩니다.


[정리] preprocess_phone_number 함수

preprocess_phone_number 함수는 두 개의 인자를 받습니다.
첫 번째 인자는 데이터프레임을 입력받고,
두 번째 인자는 해당 데이터프레임에서 전처리할 컬럼의 이름을 입력받습니다.

함수 내부에서는 먼저 입력받은 컬럼이 해당 데이터프레임에 있는지 확인합니다.
만약 해당 컬럼이 있다면, astype 메소드를 이용하여 해당 컬럼을 문자열 타입으로 변환하고,
람다 함수를 사용하여 전화번호 첫 자리가 0으로 시작하지 않는 경우 맨 앞에 0을 추가해주는 전처리를 수행합니다.

마지막으로, 함수를 사용하여
데이터프레임 df_all에서 구매자 연락처, 수취인 연락처1, 수취인 연락처2 컬럼에 대해 전처리를 수행합니다.

반응형

댓글