특정 조건에 부합하는 행의 값을 판별하고, 조건에 충족하는 행을 필터링

 

 

 

다음 예제 코드는 두가지 조건(Name이 'kyungan3' 이고 TDJG가 '1000' 이상인 행)을 판별하고, 조건을 충족하는 행으로 구성된 데이터셋을 화면 및 파일로 출력

 

 

- 코드설명 -

 


 11     next(freader) 

 12     header=next(freader) 

 13     print(header)

 14     fwriter.writerow(header)


 

 

11행

- csv모듈의 next() 함수를 사용하여 입력파일의 의미없는(?) 첫번째 행을 삭제

12행

- csv모듈의 next() 함수를 사용하여 입력파일의 두번째 행을 리스트변수 header에 할당

13행

- print() 함수를 사용하여 헤더 행을 화면에 출력

14행

- 헤더 행을 파일에 출력

 


 16       station_name = str(row_list[1]).strip()

 17       TDJG = str(row_list[13]).strip().replace(',','')

 18       if station_name == 'kyungan3' and float(TDJG) > 1000.0:

 19         print(row_list)

 20         fwriter.writerow(row_list)


 

16행

- 각 행의 Name열에 해당하는 값을 가져와 station_name 변수에 할당

- 리스트 인덱싱(row_list[1])을 사용하여 각 행의 두번째 열(Name열)의 로드

str() 함수를 사용하여 값을 문자열로 반환

strip() 함수를 이용해 문자열의 양끝에서 공백, 탭, 개행문자 등 제거

17행

- 각 행의 TDJG열에 해당하는 값을 가져와 TDJG 변수에 할당

- 리스트 인덱싱(row_list[13])을 통해 각 행의 14번째 열(TDJG열)의 값 로드

- str() 함수를 사용하여 값을 문자열로 반환

- strip() 함수를 이용해 문자열의 양끝에서 공백, 탭, 개행문자 등 제거

- replace() 함수를 이용해 1000단위 쉼표 제거

18행

- 각 행의 값들이 두가지 조건에 부합하는지 판별(if문)

- station_name이 'kyungan3' 이면서 TDJG값이 1000 이상인 행을 필터링

- 두가지 조건에 모두 부합하는 행을 선별하여 조건에 맞는다면 if문 내부코드 수행

19행, 20행

- 두 조건에 모두 부합하는경우 수행되며

- 필터링된 row_list를 화면과 파일에 각각 출력

(*) 16행 ~ 20행은 for 반복문으로 csv파일 전체열에 대하여 수행

 

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

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

 

 

3_filtering_value_meet_condition.zip

 

 

Posted by Roiz
,