办公过程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)