pandas 읽기 및 쓰기 Excel

25249 단어 DataInsights
pandas 읽기와 쓰기 Excel은 중복된 데이터 가공 작업을 pandas에 맡기고 수동 노동을 절약하며 사용하기도 편리하지만 출력의 형식은 그다지 아름답지 않다.본고는 read_excel()to_excel()의 일부 세부 사항을 소개하고 비교적 미관적인 Excel 작업표를 어떻게 출력하는지 연구하고자 한다.

pandas Excel 파일 읽기


문법

DataFrame.read_excel() 구문:
pandas.read_excel(io, 
                  sheet_name=0, 
                  header=0, 
                  names=None, 
                  index_col=None, 
                  parse_cols=None, 
                  usecols=None, 
                  squeeze=False, 
                  dtype=None, 
                  engine=None, 
                  converters=None, 
                  true_values=None, 
                  false_values=None, 
                  skiprows=None, 
                  nrows=None, 
                  na_values=None, 
                  keep_default_na=True, 
                  verbose=False, 
                  parse_dates=False, 
                  date_parser=None, 
                  thousands=None, 
                  comment=None, 
                  skip_footer=0, 
                  skipfooter=0, 
                  convert_float=True, 
                  mangle_dupe_cols=True, 
                  **kwds)

매개 변수와 되돌아오는 값에 대한 설명은pandas 문서를 참고하십시오.
가장 간단한 방법은 파일 이름 매개 변수만 지정하고 xls문과 xlsx 파일 형식을 지원하며 함수의 반환 값은 DataFrame 형식의 대상입니다.예를 들어 D 디스크 디렉터리에 있는 소스를 읽습니다.xlsx 파일:
import pandas as pd
df1 = pd.read_excel(r'D:/source.xlsx)

py 파일이 있는 디렉토리의 Excel 파일을 읽으려면 다음 코드를 참조하십시오.
import pandas as pd 
import os

# get path of current directory
curr_path = os.path.dirname(os.path.abspath(__file__))
fname = os.path.join(curr_path, 'users.xlsx')
df2 = pd.read_excel(fname)

읽을 워크시트 지정


여러 개의 워크시트가 있는 Excel 파일에 대해pandas는 기본적으로 첫 번째 워크시트 sheet_name=0 를 읽습니다.다음 두 가지 방법으로 읽을 워크시트를 지정할 수 있습니다.
#  :  index  
df3 = pd.read_excel(file_name, sheet_name=0)

#  : 
df4 = pd.read_excel(file_name, sheet_name='Sheet1')

지정한 열 가져오기


지정한 열만 가져오려면 usecols 매개 변수를 통해 A:DH 이 4열을 가져오려면 다음과 같은 두 가지 방법이 있습니다.
df6 = pd.read_excel(r'D:/source.xlsx', usecols='A:D,H')

#  
df6 = pd.read_excel(r'D:/source.xlsx', usecols=[0,1,2,3,7])

헤더 지정


기본적으로pandas는 첫 번째 행동 헤더(header)를 가정합니다. 만약에 Excel이 첫 번째 줄에서 시작하지 않았다면, header 파라미터는 어떤 줄을 헤더로 할 것인지를 지정하는 데 사용되고, 헤더는 DataFrame에서 열 인덱스(column index)로 변하고, 헤더 파라미터는 0에서 시작합니다. 예를 들어 두 번째 줄을 헤더로 할 경우:
df = pd.read_excel(file_name, header=1)

pandas 쓰기 Excel


문법

DataFrame.to_excel() 구문:
DataFrame.to_excel(excel_writer, 
                   sheet_name='Sheet1', 
                   na_rep='', 
                   float_format=None, 
                   columns=None, 
                   header=True, 
                   index=True, 
                   index_label=None, 
                   startrow=0, startcol=0, 
                   engine=None, 
                   merge_cells=True, 
                   encoding=None, 
                   inf_rep='inf', 
                   verbose=True, 
                   freeze_panes=None)

매개 변수와 되돌아오는 값에 대한 설명은pandas 문서를 참고하십시오.
데이터가 Excel에 쓰려면 먼저 engine를 설치해야 합니다. engine이 데이터를 Excel에 쓰고pandas는 Openpyx나 xlsxwriter를 쓰기 엔진으로 사용합니다.
Excel에 단일 객체를 쓰려면 file name 을 지정하면 됩니다.
import pandas as pd
import os

path = os.path.dirname(os.path.abspath(__file__))
source_file = os.path.join(path, 'source.xlsx')
output_file = os.path.join(path, 'output.xlsx')

df = pd.read_excel(source_file, sheet_name=0)
df.to_excel(output_file)

하면, 만약, 만약...xlsx 파일이 이미 존재합니다. to_excel() 먼저 output을 삭제합니다.xlsx 파일, 그리고 새로운 파일을 다시 생성합니다. 기본적으로 색인 열을 추가합니다. 색인은 0에서 n의 정수입니다.

인덱스 사용 안 함


일반적으로 인덱스가 필요 없는 Excel 내보내기index 매개변수를 False로 설정하면 됩니다.
df.to_excel(output_file, index=False)

다중 워크시트 내보내기


여러 개의 작업표를 내보내려면 excel writer engine을 명확하게 제시하고 DataFrame.to_excel() 방법을 호출해야 합니다.
import pandas as pd
import os

path = os.path.dirname(os.path.abspath(__file__))
source_file = os.path.join(path, 'source.xlsx')
output_file = os.path.join(path, 'output.xlsx')

df1 = pd.read_excel(source_file, sheet_name=0)
df2 = pd.read_excel(source_file, sheet_name=0, usecols='A:D,H')

with pd.ExcelWriter(output_file, engine='xlsxwriter') as writer:    
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

작업표 미화


pandas에서 내보낸 작업표는 아름답지 않습니다. 작업표를 미화하려면 to_excel() 방법 이후 Excel writer engine의 포맷 설정 기능을 통해 포맷을 설정할 수 있습니다.테스트에 따르면 to_excel() 파일을 먼저 삭제하기 때문에 Template를 사용하여 미리 정의된 형식을 저장할 수 없습니다.따라서 보고서 출력과 같은 형식이 있는 Excel 파일을 내보내려면 Template + Excel writer engine 수동 코드를 고려할 수 있습니다.
Creating Advanced Excel Workbooks with Python 이 글은 xlsxwriter의 add_table() 방법을 사용하여 Excel에서 Table 대상을 만들고 미리 정의된 형식을 선택하는 방법을 설명합니다.나는 코드를 가공하여 더욱 일반적인 적합성을 가지게 했다.
import pandas as pd
import os

def get_col_widths(dataframe):    
    return [max([len(str(s))  for s in dataframe[col].values] 
            + [len(col)]) for col in dataframe.columns]

def fmt_excel(writer, sheetname, dataframe):
    # Get the workbook and the summary sheet so we can add the formatting
    workbook = writer.book
    worksheet = writer.sheets[sheetname]
    col_count = dataframe.shape[1]
    row_count = dataframe.shape[0]

    col_names = []
    for i in range(0, col_count):
        col_names.append({'header': dataframe.columns[i]})

    # rng = 'A1:H{}'.format(row_count + 1)
    worksheet.add_table(0, 0, row_count,col_count-1, {
        'columns': col_names,
        'style': 'Table Style Medium 20'
    })

    # auto column size
    col_widths = get_col_widths(dataframe)
    for i, width in enumerate(col_widths):
        worksheet.set_column(i, i, width)

path = os.path.dirname(os.path.abspath(__file__))
source_file = os.path.join(path, 'source.xlsx')
output_file = os.path.join(path, 'output.xlsx')

df = pd.read_excel(source_file, sheet_name=0)

writer = pd.ExcelWriter(output_file, engine='xlsxwriter')
df.to_excel(writer, 'Sheet1', index=False)

fmt_excel(writer, 'Sheet1', df)
writer.save()

참고

  • Creating Advanced Excel Workbooks with Python
  • Simulate autofit column in xslxwriter
  • Improving Pandas’s Excel Output
  • 좋은 웹페이지 즐겨찾기