여러개의 입력파일(CSV)에 대한 통계 수치 계산
다음 예제코드는 여러개의 입력 파일(CSV)에서 열의 합계와 평균을 계산하여 화면 및 파일로 출력
- 코드설명 -
9 output_header_list = ['file_name','total_chl-a','average_chl-a']
10
11 csv_out_file = open(output_file, 'a', newline='')
12 fwriter = csv.writer(csv_out_file)
13 fwriter.writerow(output_header_list)
9행
- 출력파일의 열 헤더정보를 갖는 리스트변수 생성
11행
- 출력파일을 append 형식으로 open
12행
- 출력파일을 작성하기 위한 fwreter객체 생성
13행
- 출력파일에 헤더행(output_header_list)를 작성
18 output_list = []
19 output_list.append(os.path.basename(input_file))
20 header = next(freader)
21 total_chla = 0.0
22 number_of_chla = 0.0
18행
- 결과값을 저장할 빈 리스트 생성
19행
- os모듈을 이용해 입력파일의 이름을 output_list 리스트변수에 추가
20행
- next()함수를 사용하여 각 파일의 헤더 행을 제거
21, 22행
- 각 csv파일에서 chl-a의 개수와 합을 저장할 total_chla, number_of_chla
23 for row in freader:
24 chla_amount = row[-1]
25 total_chla += float(str(chla_amount).strip().replace(',',''))
26 #print(os.path.basename(input_file),': ',total_chla)
27 number_of_chla += 1
23행
- 각 입력파일 내에 있는 각각의 행을 반복하는 for문24행
- 리스트의 인덱스를 사용하여 chl-a 열의 데이터 값을 추출하고 chla_amount변수에 저장
- 'row[-1]'은 행의 맨 마지막 열을 의미
25행
- str함수를 사용해 chla_amount의 값을 문자열로 변환
- 이후, strip() 및 replace() 함수(특정 조건을 충족하는 행의 필터링 참고)를 사용하여 데이터 값에서 쉼표 제거
- 마지막으로 float()함수를 사용하여 문자열을 부동소수점 숫자로 변환하고 chla_amount변수에 할당
27행
- chl-a 열의 개수를 카운팅
28 average_chla = '{0:.2f}'.format(total_chla / number_of_chla)
29 # total_chla = '{0:.2f}'.format(total_chla)
30 output_list.append(total_chla)
31 output_list.append(average_chla)
32 fwriter.writerow(output_list)
33 print(output_list)
34 csv_out_file.close()
28행
- chl-a의 총합(total_chla)을 열의 개수(number_of_chla)로 나누어 평균값을 계산
- 계산된 평균값을 소수점 이하 두 자리로 형식화하여 문자열로 변환한뒤 average_chla변수에 저장
30행
- total_chla 값을 output_list의 두번째 값으로 추가
31행
- average_chla 값을 output_list의 세번째 값으로 추가
32, 33행
- output_list의 값을 파일 및 화면에 출력
(*) 화면 출력결과
(*) 출력파일로 설정한 r_sum_average_from_multiple_CSVs.csv를 통해 결과 확인
(*) 소스코드 및 CSV파일 첨부
'Python' 카테고리의 다른 글
[CSV] 여러개의 CSV파일 처리 - 2 (0) | 2019.01.10 |
---|---|
[CSV] 여러개의 CSV파일 처리 - 1 (0) | 2019.01.08 |
[CSV] 헤더 추가하기 (0) | 2019.01.07 |
[CSV] 행의 연속선택 (0) | 2018.12.12 |
[CSV] 열의 헤더를 사용하여 특정 열을 선택 (0) | 2018.11.27 |