(수정)파이썬 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 답변
-
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)
댓글 입력