zoukankan      html  css  js  c++  java
  • 使用Python处理Excel文件的一些代码示例

    笔记:使用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下

    相关库文档:

    xlrd

    xlwt

  • 相关阅读:
    Codeforces Round #674 (Div. 3)C. Increase and Copy
    Calendar Game
    poj3255Roadblocks
    L2-008 最长对称子串
    L2-004 这是二叉搜索树吗?
    D. Boboniu Chats with Du Codeforces Round #664 (Div. 2)
    暑假了,冲冲冲
    逆元和同余
    懒惰的我
    Codeforces Round #594 (Div. 2) C题
  • 原文地址:https://www.cnblogs.com/lnlin/p/9970835.html
Copyright © 2011-2022 走看看