특정 조건에 부합하는 행의 값을 판별하고, 조건에 충족하는 행을 필터링
다음 예제 코드는 두가지 조건(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
'Python' 카테고리의 다른 글
[CSV] 열의 인덱스 값을 사용하여 특정 열을 선택 (0) | 2018.11.27 |
---|---|
[CSV] 패턴, 정규 표현식을 활용한 필터링 (0) | 2018.11.26 |
[CSV] 특정 집합의 값을 포함하는 행의 필터링 (0) | 2018.11.24 |
[CSV] 파일 읽고 쓰기(2) (0) | 2018.11.22 |
[CSV] 파일 읽고 쓰기(1) (0) | 2018.11.21 |