python csv에서 read한 Dataframe에서 원하는 부분만 추출할 수 있을까요?

조회수 579회

안녕하세요. 파이썬 입문자입니다.

DataFrame으로 csv, Excel 핸들링 중인데요. 이것 저것 시도 하다가 막힌 부분이 있어서 도움 요청드립니다. 아래 그림처럼 csv 파일이 있을 때 제가 원하는 부분은 a2아래 있으면서 아래 NaN 값보다는 위에 있는 값들을 뽑고 싶은데요.(예시의 csv 파일에서는 p,q 입니다.) 여기서 문제는 저희가 해당 csv 파일에 대해 아는 정보는 오직 a1, a2 입니다. a1의 무조건 (1,A) 에 위치하고요. a2는 csv 파일 상 (random, A) 한 위치에 있습니다. 그리고 p와q도 random 알파벳이며 p, q가 아니라 b,c,d,e 가 각각 다른 행으로 존재할수도 있습니다. 즉, 제가 원하는 데이터들은 a2 밑에 있으면서 a2 밑에서 최초의 NaN값보다는 위에 있는 모든 데이터들을 따로 뽑고 싶습니다. 이럴 경우 어떻게 하면 좋을까요. 도움 부탁 드립니다ㅠㅠ

이미지

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    df = pd.DataFrame(
        [
            ['a1', 2, 3],
            ['b', 5, 6],
    
            # -------------
            ['a2'],
            ['c', 5, 6],
            ['d', 5, 6],
            ['a2', 5, 6],
            ['e', 5, 6],
            # -------------
            ['NaN', 5, 6],
    
            ['f', 5, 6],
            ['g', 5, 6],
    
            # -------------
            ['a2'],
            ['e', 5, 6],
            # -------------
            ['NaN', 5, 6],
    
            ['h', 8, 9],
            ['a3', 5, 6],
        ],
        columns=['A', 'B', 'C'])
    
    a2_index_list = df.index[df['A'] == 'a2'].tolist()
    
    for i in a2_index_list:
        print('-' * 20)
        tempDf = df[i:]
        nextNan_indexList = tempDf.index[tempDf['A'] == 'NaN'].tolist()
        if len(nextNan_indexList) > 0:
            print(df[i+1:nextNan_indexList[0]])
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)