基于pandas的Python数据处理Excel的二次封装

适用Excel和CSV文件的读写操作的封装

使用条件

  • Python 3.x版本
  • pandas

基于pandas常用方法的封装

读取列数据并生成列表

对pandas中DataFrame对象的列数据读取并生成Python列表方便后续处理是Python数据处理中经常需要重复的操作。为了提高效率,将此操作封装成一个函数如下:

def Columns_2_List(path, col):
    """读取Excel或CSV文件中的某列数据并生成列表"""
    """
    @param(str, str):
        path: 文件路径
        col: 表格中的列的表头
    
    @return(list): 
        表格中col关键词所对应的列组成的列表
    """
    if ".xlsx" in path:
        df = pd.read_excel(path)
    elif ".csv" in path:
        df = pd.read_csv(path)
    else:
        print("Please enter CSV or Excel file.")
    
    return list(df[col])

读取行数据并生成列表

同样对DataFrame对象进行行数据的读取也是在数据处理中经常使用的操作,因此对此操作进行类似的封装:

def Rows_2_List(path, row):
    """读取Excel或CSV文件中的某行数据并生成列表"""
    """
    @param(str, int):
        path: 文件路径
        row: 表格的行数
    @return(list):
        表格中row关键词所对应的行组成的列表
    """
    if ".xlsx" in path:
        df = pd.read_excel(path)
    elif ".csv" in path:
        df = pd.read_csv(path)
    else:
        print("Please enter CSV or Excel file.")
        
    return list(df.loc[row])

设置行索引和列索引字典

在使用Python完成了数据处理之后,经常需要通过pandas.DataFrame()方法来生成新的DataFrame对象,方便后续生成新的数据表格。
此函数接收行索引和列索引的数据,并生成字典,方便与下述生成Excel文件的函数配合使用。

def Set_Index_Dict(cols, rows=None):
    """设置行索引和列索引"""
    '''
    @param(iterable, iterable):
        cols: 列索引
        rows: 行索引
    @return(dict):
        返回行列索引字典
    '''
    dict_ = {
        "cols": cols,
        "rows": rows
        }
    return dict_

数据生成Excel文件

在完成数据处理,并设置好数据表格的行索引和列索引之后,为了方便,我们可能选择生成Excel表格,使用Excel表格进行更加方便和更加可视化的数据处理工作。此函数接收数据变量和行列索引的字典后生成Excel表格方便进一步数据处理。

def Data_2_Sheet(tup, path, index, method='cols'):
    """列表的内容转换并生成Excel文件"""
    """
    @param(tuple, str, dict, str):
        tup: 嵌套数据元组
            e.g.
            ([col1], [col2])
            ([row1], [row2])
        path: 需要输出的文件路径
        index: 含列索引和行索引的字典
            e.g.
            index = {
                'cols':(cols_index)
                'rows':(rows_index)
                }
        method: 列表拼接的方式
            'cols': 按列拼接
            'rows': 按行拼接
    @return: None
    """
    if  method == 'cols':
        dict_ = dict(zip(index["cols"], tup))
        df = pd.DataFrame(dict_, index=index["rows"])
    
    # 行数据转换成列数据来处理
    if method == 'rows':
        cols = []
        for i in range(len(tup[0])):
            temp = []
            for j in range(len(tup)):
                temp.append(tup[j][i])
            cols.append(temp)
                
        dict_ = dict(zip(index["cols"], cols))
        df = pd.DataFrame(dict_, index=index["rows"])
    
    with pd.ExcelWriter(path) as writer:
        df.to_excel(writer)

你可能感兴趣的:(python,pandas,excel)