当前位置 博文首页 > 教你用Python实现Excel表格处理

    教你用Python实现Excel表格处理

    作者:董可伦 时间:2021-06-02 17:45

    一、文件

    一个测试有两个sheet页的Excel测试文件 test.xlsx

    二、代码

    import pandas as pd
    
    file1 = pd.ExcelFile('D:\\data\\py\\test.xlsx')
    file2 = pd.read_excel('D:\\data\\py\\test.xlsx')
    print(file)
    <pandas.io.excel._base.ExcelFile object at 0x0000021DE525DF88>
    -----------------分割线---------------------
       姓名  年龄 性别  住址
    0  张三   7  男 NaN
    1  李四   6  男 NaN
    2  王芳   6  女 NaN
    
    

    三、分析

    pd.read_excel读出来是一个dataframe可以直接打印出内容,但是只能读取一个sheet页,默认第一个sheet页

    @Appender(_read_excel_doc)
    @deprecate_kwarg("skip_footer", "skipfooter")
    def read_excel(
        io,
        sheet_name=0,
        header=0,
        names=None,
        index_col=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
    ):
    
        for arg in ("sheet", "sheetname", "parse_cols"):
            if arg in kwds:
                raise TypeError(
                    "read_excel() got an unexpected keyword argument " "`{}`".format(arg)
                )
    
        if not isinstance(io, ExcelFile):
            io = ExcelFile(io, engine=engine)
        elif engine and engine != io.engine:
            raise ValueError(
                "Engine should not be specified when passing "
                "an ExcelFile - ExcelFile already has the engine set"
            )
    
        return io.parse(
            sheet_name=sheet_name,
            header=header,
            names=names,
            index_col=index_col,
            usecols=usecols,
            squeeze=squeeze,
            dtype=dtype,
            converters=converters,
            true_values=true_values,
            false_values=false_values,
            skiprows=skiprows,
            nrows=nrows,
            na_values=na_values,
            keep_default_na=keep_default_na,
            verbose=verbose,
            parse_dates=parse_dates,
            date_parser=date_parser,
            thousands=thousands,
            comment=comment,
            skipfooter=skipfooter,
            convert_float=convert_float,
            mangle_dupe_cols=mangle_dupe_cols,
            **kwds
        )
    
    

    pd.ExcelFile 返回值是一个Excel对象,不能直接用,但是可以读取整个Excel内容

    四、pd.ExcelFile

    file = pd.ExcelFile('D:\\data\\py\\test.xlsx')

    sheet页名称

    print(file.sheet_names)
    ['一年级', '二年级']

    遍历读取每个sheet页的内容

    for name in file.sheet_names:
        _df = pd.read_excel(file,name)
        print(_df)
    
      姓名  年龄 性别  住址
    0  张三   7  男 NaN
    1  李四   6  男 NaN
    2  王芳   6  女 NaN
       姓名  年龄 性别
    0  李明   8  男
    1  刘敏   8  女
    2  张强   7  男

    将两个sheet页的内容合并,并添加一列内容为sheet页名称

    df_list=[]
    for name in file.sheet_names:
        _df = pd.read_excel(file,name)
        _df['班级']=name
        df_list.append(_df)
    df = pd.concat([_df for _df in df_list],sort=False)
    print(df)
    
    姓名  年龄 性别  住址   班级
    0  张三   7  男 NaN  一年级
    1  李四   6  男 NaN  一年级
    2  王芳   6  女 NaN  一年级
    0  李明   8  男 NaN  二年级
    1  刘敏   8  女 NaN  二年级
    2  张强   7  男 NaN  二年级
    

    忽略掉原来的index

    df = pd.concat([_df for _df in df_list],ignore_index=True,sort=False)
    print(df)
    姓名  年龄 性别  住址   班级
    0  张三   7  男 NaN  一年级
    1  李四   6  男 NaN  一年级
    2  王芳   6  女 NaN  一年级
    3  李明   8  男 NaN  二年级
    4  刘敏   8  女 NaN  二年级
    5  张强   7  男 NaN  二年级
    

    修改列名为英文

    df = df.rename(columns={'姓名': 'name', '年龄': 'age', '性别': 'sex', '住址': 'address', '班级': 'class'})
    print(df)
    name  age sex  address class
    0   张三    7   男      NaN   一年级
    1   李四    6   男      NaN   一年级
    2   王芳    6   女      NaN   一年级
    3   李明    8   男      NaN   二年级
    4   刘敏    8   女      NaN   二年级
    5   张强    7   男      NaN   二年级
    

    将df保存为CSV、Excel文件

    df.to_csv('../data/sheet合并.csv',index=False) 
    df.to_excel('../data/sheet合并.xls',index=True) 

    五、总结

    可以发现Python读写Excel文件还是很方便的!

    /python/blob/master/data/sheet%E5%90%88%E5%B9%B6.xls)

    df.to_csv('../data/sheet合并.csv',index=False) 
    df.to_excel('../data/sheet合并.xls',index=True) 
    js
    下一篇:没有了