(수정)파이썬 DataFrame에서 문자랑 숫자를 각각 분리해서 각각 새로운 column으로 만들고 싶습니다.

조회수 351회

안녕하세요. 파이썬에서 DataFrame 공부 중인 입문자입니다. 만들어진 df의 특정 column에서 문자와 숫자를 구분하고 싶어서요. 찾아보니깐 import re 를 이용하는 거 같은데요. 뭔가 숫자랑 문자랑 여러개 섞여있는 경우에는 어떻게 해야될지 잘 안되서요..


df = pd.DataFrame({"idx4":["ex100f", "ew20", "ed200", None, None,"ed200f", "ed30f",None,"ew2",None,"ex3"] })
이런 식으로 df가 있으면 맨 앞의 "e"는 없애고 숫자와 문자를 분리해서  idx5, idx6, idx7을 만들고 싶습니다.

a1  idx3       idx4
b   ex1.x.1     ex100f
c   ex1.x       ew20
d   ex2.x.2     ed200
e   ex2.x.3 
f   ex1.x.2 
g   ex2.x       ed200f
h   ex2.x.4     ed30f
i   ex2.x.5 
j   ex1.x.3     ew2
k   ex3.x   
l   ex2.x.6     ex3
m   ex2.x.7     ed200f


위의 df에서 아래 처럼 만들고 싶습니다!

a1  idx3     idx4   idx5    idx6    idx7
b   ex1.x.1  ex100f   x      100        f
c   ex1.x    ew20     w      20 
d   ex2.x.2  ed200    d      200    
e   ex2.x.3             
f   ex1.x.2             
g   ex2.x    ed200f   d      200        f
h   ex2.x.4  ed30f    d      30         f
i   ex2.x.5             
j   ex1.x.3  ew2      w      2  
k   ex3.x               
l   ex2.x.6  ex3      x      3  
m   ex2.x.7  ed200f   d      200        f

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    
    import pandas as pd
    import re
    
    def getNumber(myData):
        myStringList = re.findall(r'\d+', str(myData))
        if len(myStringList) > 0:
            return int(myStringList[0])
        else:
            return ''
    
    
    if __name__ == '__main__':
        df = pd.DataFrame(
            {
                "idx4": ["ex100f", "ew20", "ed200", None, None, "ed200f", "ed30f", None, "ew2", None, "ex3"]
            }
        )
        df['idx5'] = df['idx4'].apply(lambda x: x[1] if x is not None else '')
        df['idx6'] = df['idx4'].apply(lambda x: getNumber(x))
        df['idx7'] = df['idx4'].apply(lambda x: x[-1] if x is not None and x[-1].isalpha() else '')
        print(df)
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)