CSV 파일에 불필요한 열이 포함되어있는 경우, 필요한 열만 필터링하여 활용

- 열의 인덱스 값을 사용하는 방법

- 열의 헤더를 사용하는 방법

 

열의 헤더를 사용해 특정(관심) 열을 필터링

- 관심있는 열 헤더를 쉽게 식별가능

- 여러개의 입력 파일을 처리할 때 열의 헤더는 같지만 열의 위치가 입력 파일에 따라 다를 때

 

다음 예제 코드는 [CSV] 열의 인덱스 값을 사용하여 특정열을 선택 에서와 동일하게 Name 및 BOD, TN, T-P열만 사용하기 위한 필터링을 헤더명을 이용해 수행

 

 

 

 

- 코드설명 -

 


  7 selected_column_name = ['Name', 'BOD', 'T-P', 'TN']

  8 selected_column_index = [ ]


 

7행

- 관심있는 헤더명이 들어있는 리스트변수(selected_column_name) 생성

8행

- 뒤에서 관심열의 인덱스값이 들어갈 리스트변수(selected_column_index) 생성

 

 


 14       next(freader)

 15       header = next(freader)

 16       for index_value in range(len(header)):

 17          if header[index_value] in selected_column_name:

 18             selected_column_index.append(index_value)

 19       print(selected_column_name)

 20       fwriter.writerow(selected_column_name)


 

14행

- freader객체에 next()함수를 사용하여 헤더에서 사용되지 않는 행 삭제

15

- freader객체에 next()함수를 사용하여 헤더에서 사용되는 행을 header 리스트변수로 읽어옴

16행

- header 리스트변수로 읽어온 헤더의 인덱스 값에 대해 반복문 수행

17행

- if문과 리스트 인덱싱을 통해 각 열의 헤더가 관심 헤더명과 동일한 값인지 판별

- header[index_value]가 selected_column_name과 같다면 18행 수행 그렇지 않다면 for문으로...

18행

- 17행에서 판별한 값이 포함되어있는 index_value값을 selected_column_index리스트 변수에 추가

19, 20행

- 관심있는 헤더를 화면과 파일로 출력

 


 21       for row_list in freader: 

 22          row_list_output = []

 23          for index_value in selected_column_index

 24             row_list_output.append(row_list[index_value])

 25          print(row_list_output)

 26          fwriter.writerow(row_list_output)


 

21행

- 헤더를 제외한 CSV파일의 값에 대해 for문 수행

22행

- 포함하려는(관심있는)행의 데이터 값을 저장할 빈 리스트(row_list_output) 생성

23행

- selected_column_index의 값을 반복

24행

- 23행의 인덱스 값에 해당하는 열의 데이터 값을 row_list_output에 추가

25, 26

- row_list_output의 값을 화면 및 파일에 출력

 

(*) 출력파일 로 설정한 r_filtering_by_column_name.csv를 통해 결과 확인

(*) 소스코드 파일 첨부(csv파일은 [CSV] 파일 읽고 쓰기(2) 에...)

 

 

7_filtering_by_column_name.zip

Posted by Roiz
,