파이썬 csv 파일을 불러와 구분하는 방법에 대해 질문 드립니다

조회수 254회

csv 파일을 불러와 데이터를 구분해야 하는데 방법이 떠오르지 않아 질문 드립니다. 분명히 무언가 방법이 있을 것 같은데 어떤 방식으로 검색해야 하는지도 감이 잘 잡히지 않습니다.

아래와 같은 형식의 csv 파일이 있습니다.

X Y
#COLINE#point
50 100
100 100
100 50
50 50
#LNDARE#point
-50 -100
-100 -100
-100 -50
-50 -50

형식에서 볼 수 있듯이 첫 칼럼은 X좌표를, 둘째 칼럼은 Y좌표를 나타냅니다. 또한 #으로 시작하는 것은 아래 정보가 어떤 것을 의미하는지 적혀있는 설명입니다.

위 파일을 이용하여 하나의 CSV 파일을 여러개의 데이터 프레임으로 나누고 싶습니다. 예를 들어 COLINE을 하나의 데이터 프레임으로, LNDARE를 다른 하나의 데이터 프레임으로 구분하고 싶습니다.

데이터 프레임으로 CSV를 불러온 후, 위와 같이 구분할 수 있는 방법이 있을 까요? 결과물로 나오는 것은 다음과 같은 형식으로 나왔으면 합니다.

COLINE = 2,3,4,5번 로우가 포함된 데이터프레임 (칼럼 이름은 X,Y)

LNDARE = 7,8,9,10번 로우가 포함된 데이터프레임 (칼럼 이름은 X,Y)

아직 파이썬으로 데이터 전처리 하는 과정이 어렵습니다... 도움이 필요합니다.

1 답변

  • import csv
    
    import pandas as pd
    
    f = open("data.csv", "r")
    reader = csv.reader(f)
    datas = {}
    flag = "DEFAULT"
    
    for line in reader:
        if line[0].find("COLINE") > 0:
            flag = "COLINE"
        elif line[0].find("LNDARE") > 0:
            flag = "LNDARE"
        else:
            if flag not in datas.keys():
                datas[flag] = {"x": [], "y": []}
            datas[flag]["x"].append(line[0])
            datas[flag]["y"].append(line[1])
    
    coline = pd.DataFrame(datas["COLINE"])
    lndare = pd.DataFrame(datas["LNDARE"])
    
    print(coline)
    print(lndare)
    
    # output
         x     y
    0   50   100
    1  100   100
    2  100    50
    3   50    50
          x      y
    0   -50   -100
    1  -100   -100
    2  -100    -50
    3   -50    -50
    

    이런 것을 말씀하신게 맞을까요 ??

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 네!! 맞습니다!! 제가 이해한 것이 맞는지 확인 차 질문 드립니다. reader를 for문 안에 사용하면 csv의 한 줄씩 line으로 사용하는 것인가요? 이효근 2023.2.12 01:29
    • 넵 맞습니다. 텍스트 한 줄을 읽어서 csv의 구분자로 split한 것과 동일합니다. 알 수 없는 사용자 2023.2.12 15:59

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

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

(ಠ_ಠ)
(ಠ‿ಠ)