[CSV] 특정 조건을 충족하는 행의 필터링
특정 조건에 부합하는 행의 값을 판별하고, 조건에 충족하는 행을 필터링
다음 예제 코드는 두가지 조건(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