办公自动化之-pandas解析excel(一)

办公过程excel需求

在工作过程中, 很多岗位都需要操作excel数据,直接使用office或者wps工具虽然直观,但是面临效率问题,这里给出一些常见需求,以求达到抛砖引玉的作用,一起提高办公效率。下面是使用pandas解析excel的一些源代码,安装pandas后均可直接运行。


 下面的需求操作在相同表格,所以处理时,为了直观创建了一个类。


根据索引值检索某一行

class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName):
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.get_fixed_row('zhangsan3')
    print(fix_value)

根据索引值检索某一列 

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.get_fixed_col('age')
    print(fix_value)

 

将excel数据转换为字典

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col

    def get_dict_from_excel(self):
        """
        从给定的excel文件,输出对应的字典形式
        :return:
        """
        source_dict = self.source_df.to_dict()
        return source_dict


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.get_dict_from_excel()
    print(fix_value)

 需要说明的是,转换后的字典最外层键名为column名,值为字典(内层键值对),内层键值对的键为index名,值为单元格内容。

excel添加新行

excel添加新的一行,其实就是给dataframe添加一行数据,然后将新的dataframe保存为新的excel,实际实现时分两步。

1.给dataframe添加新行

 2.将新的dataframe保存为新的列表 

实现代码如下

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col

    def get_dict_from_excel(self):
        """
        从给定的excel文件,输出对应的字典形式
        :return:
        """
        source_dict = self.source_df.to_dict()
        return source_dict

    def add_new_rows(self, rowName, values):
        """
        添加新的行
        :param rowName:
        :return:
        """
        self.source_df.loc[rowName] = values
        self.source_df.to_excel('demo.xlsx')
        return self.source_df


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.add_new_rows('gg', values=[i for i in range(3)])
    print(fix_value)

excel添加新列

与添加新行逻辑相同,完整代码如下:

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col

    def get_dict_from_excel(self):
        """
        从给定的excel文件,输出对应的字典形式
        :return:
        """
        source_dict = self.source_df.to_dict()
        return source_dict

    def add_new_rows(self, rowName, values):
        """
        添加新的行
        :param rowName:
        :return:
        """
        self.source_df.loc[rowName] = values
        self.source_df.to_excel('demo.xlsx')
        return self.source_df

    def add_new_col(self, colName, values):
        """
        添加新的列
        :param values:
        :return:
        """
        self.source_df[colName] = values
        self.source_df.to_excel('gg.xlsx')
        return self.source_df


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.add_new_col('gg', values=[i for i in range(36)])
    print(fix_value)

 

修改某一单元格的值

 

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col

    def get_dict_from_excel(self):
        """
        从给定的excel文件,输出对应的字典形式
        :return:
        """
        source_dict = self.source_df.to_dict()
        return source_dict

    def add_new_rows(self, rowName, values):
        """
        添加新的行
        :param rowName:
        :return:
        """
        self.source_df.loc[rowName] = values
        self.source_df.to_excel('demo.xlsx')
        return self.source_df

    def add_new_col(self, colName, values):
        """
        添加新的列
        :param values:
        :return:
        """
        self.source_df[colName] = values
        self.source_df.to_excel('gg.xlsx')
        return self.source_df

    def modify_cell_value(self, rowName, colName, value):
        """
        修改指定单元格的值为指定值
        :param rowName: 行名
        :param colName: 列名
        :param value: 新值
        :return:
        """
        self.source_df.loc[rowName, colName] = value
        return self.source_df


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.modify_cell_value('zhangsan1', colName='value1', value=1)
    print(fix_value)

合并两个excel

合并俩个excel转换为两个dataframe合并,返回一个新的dataframe,然后将dataframe保存为excel文件。合并分好几种情况,这里只给出其中一种情况的处理代码。

import pandas as pd


class Base:
    def __init__(self, file_path, sheet_name):
        self.source_df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=0)
        self.df = pd.read_excel(file_path, sheet_name='Sheet2', index_col=0)

    def get_fixed_row(self, rowName) -> list:
        """
        根据行索引,输出行内容
        :param rowName: 输入行索引名
        :return:
        """
        fixed_row = self.source_df.loc[rowName].values.tolist()
        return fixed_row

    def get_fixed_col(self, colName) -> list:
        """
        根据列索引,输出对应的列内容
        :param colName: 列名
        :return:
        """
        fixed_col = self.source_df[colName].values.tolist()
        return fixed_col

    def get_dict_from_excel(self):
        """
        从给定的excel文件,输出对应的字典形式
        :return:
        """
        source_dict = self.source_df.to_dict()
        return source_dict

    def add_new_rows(self, rowName, values):
        """
        添加新的行
        :param rowName:
        :return:
        """
        self.source_df.loc[rowName] = values
        self.source_df.to_excel('demo.xlsx')
        return self.source_df

    def add_new_col(self, colName, values):
        """
        添加新的列
        :param values:
        :return:
        """
        self.source_df[colName] = values
        self.source_df.to_excel('gg.xlsx')
        return self.source_df

    def modify_cell_value(self, rowName, colName, value):
        """
        修改指定单元格的值为指定值
        :param rowName: 行名
        :param colName: 列名
        :param value: 新值
        :return:
        """
        self.source_df.loc[rowName, colName] = value
        return self.source_df

    def merge_df(self, df1, df2):
        """
        合并两个df,在下方合并
        :param df1:
        :param df2:
        :return:
        """
        result = pd.concat([df1, df2], axis=0)
        return result


if __name__ == "__main__":
    path = r'C:\Users\Administrator\Desktop\1.xlsx'
    base = Base(path, sheet_name='Sheet1')
    fix_value = base.merge_df(base.source_df, base.df)
    print(fix_value)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值