Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python으로 Excel 파일 데이터를 청크로 처리하는 방법은 무엇입니까?

<시간/>

소개

세상은 엑셀이 지배하는 것 같습니다. 데이터 엔지니어링 작업에서 얼마나 많은 동료들이 의사 결정을 위한 중요한 도구로 Excel을 사용하는지 보고 놀랐습니다. 저는 MS Office 및 Excel 스프레드시트의 열렬한 팬은 아니지만 큰 Excel 스프레드시트를 효과적으로 처리하는 깔끔한 트릭을 보여 드리겠습니다.

그것을 하는 방법..

프로그램을 직접 시작하기 전에 Pandas로 Excel 스프레드시트를 처리하는 몇 가지 기본 사항을 이해하겠습니다.

1. 설치. 계속해서 openpyxl 및 xlwt를 설치하십시오. python 터미널에서 pip freeze 또는 pip list를 사용하여 사용 가능한 패키지가 설치되었는지 여부가 확실하지 않은 경우

먼저 데이터 튜플을 전달하여 Excel 스프레드시트를 생성할 것입니다. 그런 다음 데이터를 pandas 데이터 프레임에 로드합니다. 마지막으로 데이터 프레임 데이터를 새 통합 문서에 씁니다.

xlsxwriterimport 판다를 pd로 가져오기

2. 작은 데이터로 Excel 스프레드 시트를 만듭니다. 사전 데이터를 Excel 스프레드시트에 쓰는 작은 함수가 있습니다. 모든 코드 로직은 각 단계에서 정의됩니다.

# 기능 :write_data_to_filesdef write_data_to_files(inp_data, inp_file_name):"""function :이 codeargs :inp_data :대상에 쓸 튜플 데이터 file_name :datareturn을 저장할 대상 파일 이름으로 전달된 데이터로 csv 파일 생성 :noneassumption :생성할 파일과 이 코드는 같은 디렉터리에 있습니다."""print(f" *** 데이터를 쓰기 - {inp_file_name}")# Workbook.workbook 생성 =xlsxwriter.Workbook(inp_file_name)# add a workflow.worksheet =workbook.add_worksheet()# 첫 번째 셀부터 시작합니다. 행과 열은 0 인덱스입니다.row =0col =0# 입력 데이터를 읽고 inp_data:worksheet.write(row, col, player)worksheet.write(row, col + 1, titles)row +=1# close workbook.workbook.close()print(f" *** 데이터 쓰기 완료 - {inp_file_name}")


# 기능 :excel_functions_with_pandasdef excel_functions_with_pandas(inp_file_name):"""function :pandasargs를 사용하여 엑셀에 적용할 수 있는 기능에 대한 간략한 개요 :inp_file_name :입력 엑셀 스프레드시트.return :noneassumption :입력 엑셀 스프레드시트와 이 코드는 같은 디렉토리에 있습니다 ."""data =pd.read_excel(inp_file_name)# 상위 2개 행 인쇄print(f" *** {inp_file_name}의 상위 2개 행 표시 \n {data.head()} ")# 데이터 유형 보기print( f" *** {inp_file_name}에 대한 정보 표시 - {data.info()}")# 새 스프레드시트 "Sheet2"를 만들고 데이터를 씁니다.new_players_info =pd.DataFrame(data=[{"players":" 새로운 로저 페더러", "타이틀":20},{"선수":"뉴 라파엘 나달", "타이틀":20},{"선수":"뉴 노박 조코비치", "타이틀":17},{" 선수":"새로운 앤디 머레이", "제목":3}], 열=["선수", "제목"])new_data =pd.ExcelWriter(inp_file_name)new_players_info.to_excel(new_data, sheet_name="Sheet2")if __name__ =='__main__':# 파일 이름과 datafile_na 정의 me ="temporary_file.xlsx# storagefile_data에 대한 튜플 데이터 =(['player', 'titles'], ['Federer', 20], ['Nadal', 20], ['Djokovic', 17], [' Murray', 3])# file_data를 file_name에 쓰기# write_data_to_files(file_data, file_name)# # 엑셀 파일을 pandas로 읽어와서 함수를 적용합니다.# excel_functions_with_pandas(file_name)


if __name__ =='__main__':# 파일 이름을 정의하고 datafile_name ="temporary_file.xlsx# 튜플 데이터 for storagefile_data =(['player', 'titles'], ['Federer', 20], [ '나달', 20], ['조코비치', 17], ['머레이', 3])# file_data를 file_name에 쓰기# write_data_to_files(file_data, file_name)# # 엑셀 파일을 판다에 읽어서 함수를 적용합니다.# excel_functions_with_pandas( file_name)

출력

*** 데이터 쓰기 - 임시 파일.xlsx*** 데이터 쓰기 완료 - 임시 파일.xlsx*** 상위 2행 표시 - 임시 파일.xlsxplayer titles0 Federer 201 Nadal 202 Djokovic 173 Murray 3RangeIndex:항목 4개, 데이터 열 0~3개(총 열 2개):# 열 Null이 아닌 개수 Dtype--- ------ ---------- ---- -----0 플레이어 4 null이 아닌 object1 제목 4 non-null int64dtypes:int64(1), object(1) 메모리 사용량:192.0+ 바이트*** Temporary_file.xlsx에 대한 정보 표시 - 없음 

이제 큰 csv 파일을 처리할 때 청크를 포함하여 청크를 처리하는 옵션이 꽤 있지만 Excel 스프레드 시트의 경우 Pandas는 기본적으로 청크 옵션을 제공하지 않습니다.

따라서 엑셀 스프레드시트를 덩어리로 처리하려는 경우 아래 프로그램이 매우 유용합니다.

예시

def global_excel_to_db_chunks(file_name, nrows):"""function :chunksargs에서 Excel 스프레드시트 처리 :inp_file_name :입력 Excel 스프레드 시트.return :noneassumption :입력 Excel 스프레드시트와 이 코드는 동일한 디렉토리에 있습니다."""chunks =[ ]i_chunk =0# 첫 번째 행이 헤더입니다. 이미 읽었으므로 건너뜁니다.skiprows =1df_header =pd.read_excel(file_name, nrows=1)while True:df_chunk =pd.read_excel(file_name, nrows=nrows, skiprows=skiprows, header=None)skiprows + =nrows# 데이터가 없을 때 loop.if not df_chunk.shape[0]:breakelse:print(f" ** {df_chunk.shape[0]으로 청크 번호 {i_chunk} 읽기 } Rows")# print(f" *** 읽기 청크 {i_chunk} ({df_chunk.shape[0]} rows)")chunks.append(df_chunk)i_chunk +=1df_chunks =pd.concat(chunks)# header.columns ={i:col for i, col in enumerate(df_header.columns.tolist())}df_chunks.rename(columns=columns, inplace=True)df =pd.concat([ df_header, df_chunks])print(f' *** 읽기가 청크로 완료되었습니다...')if __name__ =='__main__':print(f" *** Excel 스프레드시트에서 통계 수집 및 표시 ***") file_name ='Sample-sales-data-excel.xls'stats =pd.read_excel(file_name)print(f" ** 스프레드시트의 총 행은 - {len(stat s.index)} Rows")# 엑셀 파일을 한번에 1000행 단위로 처리합니다.global_excel_to_db_chunks(file_name, 1000)


*** Excel 스프레드시트에서 통계 수집 및 표시 ***** 스프레드시트의 총 행은 - 9994 Rows** 읽기 청크 번호 0과 1000 Rows** 읽기 청크 번호 1과 1000 Rows** 읽기 청크 1000개 행이 있는 숫자 2** 1000개 행이 있는 청크 번호 3 읽기** 1000개 행이 있는 청크 번호 4 읽기** 1000개 행이 있는 청크 번호 5 읽기** 1000개 행이 있는 청크 번호 6 읽기** 1000개 행이 있는 청크 번호 7 읽기 ** 1000개 행으로 청크 번호 8 읽기** 994개 행으로 청크 번호 9 읽기*** 청크 단위로 읽기 완료...

출력

*** Excel 스프레드시트에서 통계 수집 및 표시 ***** 스프레드시트의 총 행은 - 9994 Rows** 읽기 청크 번호 0과 1000 Rows** 읽기 청크 번호 1과 1000 Rows** 읽기 청크 1000개 행이 있는 숫자 2** 1000개 행이 있는 청크 번호 3 읽기** 1000개 행이 있는 청크 번호 4 읽기** 1000개 행이 있는 청크 번호 5 읽기** 1000개 행이 있는 청크 번호 6 읽기** 1000개 행이 있는 청크 번호 7 읽기 ** 1000개 행으로 청크 번호 8 읽기** 994개 행으로 청크 번호 9 읽기*** 청크 단위로 읽기 완료...