笔记:使用Python处理Excel文件的一些代码示例,以下代码来自于《Python数据分析基础》一书,有删改
#!/usr/bin/env python3 # 导入读取Excel文件的库,xlrd,其中的 open_workbook 为读取工作簿 from xlrd import open_workbook input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' # open_workbook(input_file) 打开一个工作簿 workbook = open_workbook(input_file) # 输出此工作簿中有多少个表 workbook.nsheets print('Number of worksheets: ', workbook.nsheets) # 遍历工作簿中的每张表 for worksheet in workbook.sheets(): # 分别输出每张表的名字、行数、列数 print('Worksheet name: ', worksheet.name, ' Rows: ', worksheet.nrows, ' Columns: ', worksheet.ncols)
# 处理单个工作簿 #!/usr/bin/env python3 # 导入读取Excel文件的库,xlrd,其中的 open_workbook 为读取工作簿 from xlrd import open_workbook # 导入写工作簿的库 from xlwt import Workbook input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' output_file = 'D:wangmDocumentslearningcodepythondata_out.xlsx' # 创建一个Workbook对象 output_workbook = Workbook() # 向output_workbook中添加一种名为'out_data_sheet_1'的表 output_wb_sheet = output_workbook.add_sheet('out_data_sheet_1') with open_workbook(input_file) as workbook: # 通过名字选取工作簿中的某个表,也可以使用索引值选定 worksheet = workbook.sheet_by_name('supplier_data') # worksheet = workbook.sheet_by_index(0) # 通过行、列索引值遍历工作簿中指定表的每一个值 for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): # 向工作簿中的一个选取的表(output_wb_sheet)的通过索引指定的单元格(row_index, column_index)中写入一个值 output_wb_sheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) # 将该工作簿保存为 output_file output_workbook.save(output_file)
#!/usr/bin/env python3 # 导入读取Excel文件的库,xlrd,其中的 open_workbook 为读取工作簿 from xlrd import open_workbook input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' # open_workbook(input_file) 打开一个工作簿 workbook = open_workbook(input_file) # 输出此工作簿中有多少个表 workbook.nsheets print('Number of worksheets: ', workbook.nsheets) # 遍历工作簿中的每张表 for worksheet in workbook.sheets(): # 分别输出每张表的名字、行数、列数 print('Worksheet name: ', worksheet.name, ' Rows: ', worksheet.nrows, ' Columns: ', worksheet.ncols)
# 处理单个工作簿 #!/usr/bin/env python3 # 导入读取Excel文件的库,xlrd,其中的 open_workbook 为读取工作簿 from xlrd import open_workbook # 导入写工作簿的库 from xlwt import Workbook input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' output_file = 'D:wangmDocumentslearningcodepythondata_out.xlsx' # 创建一个Workbook对象 output_workbook = Workbook() # 向output_workbook中添加一种名为'out_data_sheet_1'的表 output_wb_sheet = output_workbook.add_sheet('out_data_sheet_1') with open_workbook(input_file) as workbook: # 通过名字选取工作簿中的某个表,也可以使用索引值选定 worksheet = workbook.sheet_by_name('supplier_data') # worksheet = workbook.sheet_by_index(0) # 通过行、列索引值遍历工作簿中指定表的每一个值 for row_index in range(worksheet.nrows): for column_index in range(worksheet.ncols): # 向工作簿中的一个选取的表(output_wb_sheet)的通过索引指定的单元格(row_index, column_index)中写入一个值 output_wb_sheet.write(row_index, column_index, worksheet.cell_value(row_index, column_index)) # 将该工作簿保存为 output_file output_workbook.save(output_file)
#!/usr/bin/env python3 import pandas as pd input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' output_file = 'D:wangmDocumentslearningcodepythondata_out_pd.xlsx' # pd.read_excel() 读取一个Excel文件,并指定选中其中的某张表,将其变为一个”数据框“对象 data_frame = pd.read_excel(input_file, sheetname='supplier_data') # 创建一个Excel文件 writer = pd.ExcelWriter(output_file) # 将data_frame转为Excel文件,并写入输出文件 data_frame.to_excel(writer, sheet_name='supplier_data', index=False) # 保存输出文件 writer.save()
# 20181115 # 筛选特定的行 # 在基本Python中: # 类似于之前处理CSV文件,无非是改变了读写文件的函数,过程都是去每一行的值,筛选出符合条件的行 # 保存下来,然后写入Excel文件 # 下面给出使用pandas库来筛选 #!/usr/bin/env python3 import pandas as pd input_file = 'D:wangmDocumentslearningcodepythondata_row.xlsx' output_file = 'D:wangmDocumentslearningcodepythondata_out_pd.xlsx' data_frame = pd.read_excel(input_file, 'supplier_data', index_col=None) # 筛选出Cost值大于500的行,将标题行和这些行作为一个新的‘数据框’对象 # 下面这条用于筛选的语句,通过列名作为索引去除Cost的值,并将其转换为float在进行比较,比较结果为真的行留了下来 # 缺陷:将Cost的值的 $ 的符号丢掉了 #data_frame_value_meets_condition = data_frame[data_frame['Cost'].astype(float) > 500.0] writer = pd.ExcelWriter(output_file) #data_frame_value_meets_condition.to_excel(writer, sheet_name='supplier_data', index=False) #writer.save() # 还可以筛选出某一列中的值属于某个特定集合的行 important_dates = ['1/1/2018', '3/1/2018'] data_frame_value_in_set = data_frame[data_frame['Date'].isin(important_dates)] data_frame_value_in_set.to_excel(writer, sheet_name='supplier_data', index=False) writer.save() # 此处写入后也将Cost的值的 $ 的符号丢掉了,起初我认为是因为被转换为float时的原因,然而此处却发现不是,那到底是为什么? # 类似于处理CSV文件,pandas在处理Excel文件时,也有类似于使用RE筛选的函数 # 此处就产生一个疑问,pandas读取CSV文件、Excel文件后得到的对象为何如此相似?希望在后面具体了解pandas库时得到答案
选取特定的列
类似于处理CSV文件时的情况
读取多个Excel文件时,类似于前面处理CSV文件时的情况,使用glob
以上代码示例分别使用基本Python和pandas库处理Excel文件,运行在Python3.6 Win10上的Spyder下
相关库文档: