split, for 등을 이용해서 서로 형식(?)이 조금 다른 것은 어떤 방식으로 split을 사용 할 수 있을까요?

조회수 978회

안녕하세요. split, for, if문 최근에 연습 중인 입문자 입니다.

df = pd.DataFrame({"idx5":[ "ex1.x.1", 
"ex1.x", 
"ex2.x.2", 
"ex2.x.3", 
"ex1.x.2", 
"ex2.x", 
"ex2.x.4", 
"ex2.x.5", 
"ex1.x.3", 
"ex3.x", 
"ex2.x.6", 
"ex2.x.7", 
"ex1.x.4", 
"ex4.x", 
"ex2.x.8", 
"ex2.x.9", 
"ex1.x.5", 
"ex5.x", 
"ex2.x.10", 
"ex2.x.11", 
"ex1.x.6", 
"ex6.x", 
"ex2.x.12", 
"ex2.x.13", 
"ex1.x.7", 
]})

for i in range(len(df)-1) : 
    df.at[i+1, "idx6"], df.at[i+1, "idx7"], df.at[i+1, "idx8"] = df.at[i+1, "idx5"].split(".")
 ValueError: not enough values to unpack (expected 3, got 2)

위의 에러 코드가 나오는데요. 뭔가 "." 개수가 달라도 split을 할 수 있는 방법이 있을까요? 궁극적으로는 아래 처럼 idx5만 가지고 idx6, idx7, idx8을 만들고 싶어서요. idx8의 빈공간에는 임의의 문자를 동일하게 넣어주셔도 상관은 없습니다..!

idx5       idx6 idx7  idx8
ex1.x.1     ex1 x   1
ex1.x       ex1 x   
ex2.x.2     ex2 x   2
ex2.x.3     ex2 x   3
ex1.x.2     ex1 x   2
ex2.x       ex2 x   
ex2.x.4     ex2 x   4
ex2.x.5     ex2 x   5
ex1.x.3     ex1 x   3
ex3.x       ex3 x   
ex2.x.6     ex2 x   6
ex2.x.7     ex2 x   7
ex1.x.4     ex1 x   4
ex4.x       ex4 x   
ex2.x.8     ex2 x   8
ex2.x.9     ex2 x   9
ex1.x.5     ex1 x   5
ex5.x       ex5 x   
ex2.x.10    ex2 x   10
ex2.x.11    ex2 x   11
ex1.x.6     ex1 x   6
ex6.x       ex6 x   
ex2.x.12    ex2 x   12
ex2.x.13    ex2 x   13
ex1.x.7     ex1 x   7

  • 이미 원하는대로 되어 있는 것 아닌가요? 초보자 2021.8.12 14:00
  • 질문 드리려고 엑셀로 제가 만들었습니다ㅎㅎ; 물먹는하마 2021.8.13 17:14

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import pandas as pd
    
    >>> df = pd.DataFrame({"idx5":[ "ex1.x.1", 
    "ex1.x", 
    "ex2.x.2", 
    "ex2.x.3", 
    "ex1.x.2", 
    "ex2.x", 
    "ex2.x.4", 
    "ex2.x.5", 
    "ex1.x.3", 
    "ex3.x", 
    "ex2.x.6", 
    "ex2.x.7", 
    "ex1.x.4", 
    "ex4.x", 
    "ex2.x.8", 
    "ex2.x.9", 
    "ex1.x.5", 
    "ex5.x", 
    "ex2.x.10", 
    "ex2.x.11", 
    "ex1.x.6", 
    "ex6.x", 
    "ex2.x.12", 
    "ex2.x.13", 
    "ex1.x.7", 
    ]})
    >>> df
            idx5
    0    ex1.x.1
    1      ex1.x
    2    ex2.x.2
    3    ex2.x.3
    4    ex1.x.2
    5      ex2.x
    6    ex2.x.4
    7    ex2.x.5
    8    ex1.x.3
    9      ex3.x
    10   ex2.x.6
    11   ex2.x.7
    12   ex1.x.4
    13     ex4.x
    14   ex2.x.8
    15   ex2.x.9
    16   ex1.x.5
    17     ex5.x
    18  ex2.x.10
    19  ex2.x.11
    20   ex1.x.6
    21     ex6.x
    22  ex2.x.12
    23  ex2.x.13
    24   ex1.x.7
    >>> df[["idx6", "idx7", "idx9"]] = df["idx5"].str.split(".", 3, expand=True)
    >>> df
            idx5 idx6 idx7  idx9
    0    ex1.x.1  ex1    x     1
    1      ex1.x  ex1    x  None
    2    ex2.x.2  ex2    x     2
    3    ex2.x.3  ex2    x     3
    4    ex1.x.2  ex1    x     2
    5      ex2.x  ex2    x  None
    6    ex2.x.4  ex2    x     4
    7    ex2.x.5  ex2    x     5
    8    ex1.x.3  ex1    x     3
    9      ex3.x  ex3    x  None
    10   ex2.x.6  ex2    x     6
    11   ex2.x.7  ex2    x     7
    12   ex1.x.4  ex1    x     4
    13     ex4.x  ex4    x  None
    14   ex2.x.8  ex2    x     8
    15   ex2.x.9  ex2    x     9
    16   ex1.x.5  ex1    x     5
    17     ex5.x  ex5    x  None
    18  ex2.x.10  ex2    x    10
    19  ex2.x.11  ex2    x    11
    20   ex1.x.6  ex1    x     6
    21     ex6.x  ex6    x  None
    22  ex2.x.12  ex2    x    12
    23  ex2.x.13  ex2    x    13
    24   ex1.x.7  ex1    x     7
    
    >>> df = df.fillna("-")
    >>> df
            idx5 idx6 idx7 idx9
    0    ex1.x.1  ex1    x    1
    1      ex1.x  ex1    x    -
    2    ex2.x.2  ex2    x    2
    3    ex2.x.3  ex2    x    3
    4    ex1.x.2  ex1    x    2
    5      ex2.x  ex2    x    -
    6    ex2.x.4  ex2    x    4
    7    ex2.x.5  ex2    x    5
    8    ex1.x.3  ex1    x    3
    9      ex3.x  ex3    x    -
    10   ex2.x.6  ex2    x    6
    11   ex2.x.7  ex2    x    7
    12   ex1.x.4  ex1    x    4
    13     ex4.x  ex4    x    -
    14   ex2.x.8  ex2    x    8
    15   ex2.x.9  ex2    x    9
    16   ex1.x.5  ex1    x    5
    17     ex5.x  ex5    x    -
    18  ex2.x.10  ex2    x   10
    19  ex2.x.11  ex2    x   11
    20   ex1.x.6  ex1    x    6
    21     ex6.x  ex6    x    -
    22  ex2.x.12  ex2    x   12
    23  ex2.x.13  ex2    x   13
    24   ex1.x.7  ex1    x    7
    >>> 
    
    • 매번 감사드립니다! 가능하면 for문을 안 쓰는 방향으로 연습 해봐야겠네요 ㅠㅠ 물먹는하마 2021.8.13 17:09

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

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

(ಠ_ಠ)
(ಠ‿ಠ)