Python

[python] split, slice, join | 데이터 프레임, 리스트 문자열 나누기 합치기(특정문자 기준 앞, 뒤 출력)

앳홍 2023. 9. 14. 22:23
반응형

Tip.

데이터 프레임에서 사용시

str.split("구분자 ", expand=True)

split에서 expand=True를 넣으면 바로 데이터프레임의 컬럼으로 생성이 된다.

 


 

활용 데이터 구성

데이터 프레임 생성
col = ["col1", "col2", "col3"]
row = ["row1", "row2", "row3", "row4", "row5"]
data = [["a_1:first", 1, 2], ["b_2:seconds", 3, 4], ["c_3:third", 5, 6], ["d_4:fourth", 7, 8], ["e_5:fifth", 9, 10]]
df = pd.DataFrame(data, row, col)

 

리스트 생성
lst = ["a_1:first", "b_2:seconds", "c_3:third", "d_4:fourth", "e_5:fifth"]
lst

 

 

데이터 프레임 Split

col1 컬러만 추출
df['col1']

 

col1 컬럼에서 "_" 를 기준으로 분리
df['col1'].str.split("_")

"_" 를 기준으로 split 함수를 사용하면,  "_" 앞에 있던 a, b, c, d와 뒤에있던 문자들이 나누어지게 된다. 

 

"_"를 기준으로 분리한 것 중에 추출 
df['col1'].str.split("_").str.get(0) # 첫번째 추출
df['col1'].str.split("_").str.get(1) # 두번째 추출

문자열 처리 메서드 get()을 사용하면 원하는 값을 추출할 수 있다.

 

"_" 앞부분 추출 (.str.get(0) 사용)

 

"_" 뒷부분 추출 (.str.get(1) 사용)

 

.str.get(1)의 결과 값을 이어서 ": "뒷부분 추출하고 싶다면?

 

"_" 뒷부분 추출후 ":" 를 기준으로 다시 분리후 추출
df['col1'].str.split("_").str.get(1).str.split(":").str.get(1)

여기서 만약 앞 두글자만 추출하고 싶다면?

slice() 를 이용하면 된다.

 


 Slice( ) 함수란 ? 

 

슬라이싱(slicing) or 슬라이스(slice):

연속적인 객체 내에(예: 리스트, 튜플, 문자열) 범위를 지정해 선택해서 객체들을 가져오는 방법 및 표기법 의미

 

slice(종료위치)

slice(시작위치, 종료위치)

slice(시작위치, 종료위치, 증가단계)

 


 

 "_" 를 기준으로 분리 후 두번째 값 가져온 후 ":"를 기준으로 분리 후 또 가져온 두번째 값에서 앞의 두글자만 출력
df['col1'].str.split("_").str.get(1).str.split(":").str.get(1).str.slice(0, 2)

위와 같이 이어서 str.slice(0,2)를 명령하여 사용

 

 

리스트 Split( )


데이터 구성

위의 리스트 그대로를 split()으로 분리하면 어떻게 될까?

lst.split("_")

위와 같이 오류가 뜬다.

그 이유는 리스트 전체를 한번에 분리하려고 했기 때문이다.

해결방법으로는 아래와 같이 리스트 내부에 있는 인자 하나하나를 불러와서 split하면 된다.

 

리스트 에서 "_" 를 기준으로 분리 후 뒷부분 추출
for l in lst: 	# for 문으로 하나씩 받아옴
    print(l.split("_")[1])

l.split("_") 으로만 명령했으면 a, 1:first 이런식으로 분리되어 출력되었을 것이다.

여기에서 [1]로 리스트 인덱싱 했으므로 뒷부분만 출력되었다.

문자열 앞부분 즉, a,b,c,d의 문자를 출력하고 싶으면 [0]이라고 인덱싱하면된다.

 

"_" 뒷부분 추출후 ":" 를 기준으로 다시 분리후 추출
# ":"의 앞부분 추출 
for l in lst:
    print(l.split("_")[1].split(":")[0])

# ":"의 뒷부분 추출 
for l in lst:
    print(l.split("_")[1].split(":")[1])
  •  ":" 의 앞 부분 출력 결과

 

  •  ":" 의 뒷 부분 출력 결과

 

 

 "_" 를 기준으로 분리 후 두번째 값 가져온 후 ":"를 기준으로 분리 후 또 가져온 두번째 값에서 앞의 두글자만 출력
for l in lst:
    print(l.split("_")[1].split(":")[1][0:2])

 


 join ( ) 함수란 ? 

 

join함수는 리스트를 특정문자열을 이용하여 일정하게 합쳐줄 때 사용하는 함수.

기본값은 공백이므로 구분자란에 공백으로 남겨둘 시 공백을 기준으로 합쳐질 것이다. (ex. "".join(lst))

"특정문자열".join(리스트)

 


 

예시 경로
path = '/Users/mind0o0/Desktop/project/test/split'
문자열 분리
sp = path.split("/")

 

분리된 문자열 원하는 특정문자열을 넣어서 합치기 
sp_j = "/".join(sp)

 

분리한 문자열 중 원하는 부분만 합치기
sp = path.split("/")[0:3]
sp_j = "/".join(sp)

분리했을 때 "", "Users", "mind0o0" .. 로 분리됨

구분자인 "/"가 있던 자리가 공백으로 첫자리에 위치해있기때문에 공백 자리 인 0부터해서 세번째 자리까지 슬라이싱 된다.