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
,

관심 대상 집합을 포함하는 행을 필터링

- Name열에서 집합 ['kyungan3', 'kyungan5']중 한 값을 포함하는 모든 행

- Date열에서 집합 ['2007-06-04', '2007-11-13']중 한 값을 포함하는 모든 행

 

다음 예제 코드는 행의 데이터 값이 어떤 집합의 원소를 포함하는지 판별하고, 전체 행에서 관심집합의 값을 포함하는 행들(부분집합)을 찾아 화면 및 파일로 출력

 

 

 

 

- 코드설명 -

 


  7 #important_dates = ['2007-06-04', '2007-11-13', '2007-12-12']

  8 important_stations = ['kyungan3', 'kyungan5']


 

8행(7행)

- 관심값에 해당하는 name을 important_stations 변수에 리스트형(type)으로 할당

 


 19          #a_date = row_list[2]

 20          a_name = row_list[1]

 21          #if a_date in important_dates:

 22          if a_name in important_stations:

 23             print(row_list)

 24             fwriter.writerow(row_list)


 

20행(19행)

- freader로 읽은 csv 파일의 각 행에서 name열(row_list[1])을 로드하여 a_name변수에 할당

( - freader로 읽은 csv 파일의각 행에서 date열(row_list[2])을 로드하여 a_date변수에 할당 )

22행(21행)

- if 문을 사용해 a_name 변수에 들어있는 name 열의 데이터 값이 important_stations 에 있는 관심 집합에 포함되는지 판별

( - if 문을 사용해 a_date 변수에 들어있는 date 열의 데이터 값이 important_date에 있는 관심 집합에 포함되는지 판별 )

23행, 24행

- 22행의 판별결과로 a_name가 important_stations에 포함된다면, 화면 및 파일에 출력

 

(*) 주석 처리된 부분을 기존 코드와 대체하면 - 관심값을 name에서 date로 변경하여 필터링

 

 

 

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

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

 

4_filtering_value_in_set.zip

 

Posted by Roiz
,