首页 > 编程语言 >python pandas.DataFrame 编写的Excel分割工具

python pandas.DataFrame 编写的Excel分割工具

时间:2023-02-02 14:12:07浏览次数:47  
标签:__ 分割 python self Excel 指定 DataFrame df dir

import pandas as pd 
from pandas import DataFrame as DF 
import os

class SplitExcel(object):
	"""
	   分割任意的Excel文件,根据指定的列对文件进行分割,并存储到指定的位置,
	   分割的时候可以指定子文件包含哪些列。会对指定的分割列进行去重
	   参数: file 要被分割的文件地址
	          by   根据哪个列进行分割
	          prefix  生成的文件的前缀,默认是 前缀 + - + 分割项.xlsx
	          subCols 子文件包含哪些字段,这些字段必须在被分割文件中存在,否则将报错
	          joinStr 文件名中连接prefix 和 分割项的连接符合,默认是‘-’
	    如果要根据多列对文件进行分割,程序会先生成一个临时列,其中每行存储的内容是指定的多列的值使用joinStr指定的字符串连接的字符串
	    并使用这个新列进行分割
	"""
	def __init__(self, file,by=[],prefix="",subCols=[],joinStr="-"):
		self.file = file
		self.by   = by
		self.prefix = prefix
		self.subCols = subCols
		self.joinStr = joinStr

		self.df = pd.read_excel(self.file)
		self.df.reset_index(drop=True)

		print("-"*50)
		print("读取文件的列名有:",self.df.columns.tolist())
		print("-"*50)
     # 内部功能,按行处理DF的数据 def __partical__(self,df): values = [] for col in self.by: values.append(df[col]) return self.joinStr.join(values) def __make__(self): self.df["makedCol"] = self.df.apply(self.__partical__,axis=1,result_type="expand") return "makedCol" def split(self,by=[],target_dir=""): if not by and not self.by: print("错误:必须指定by参数,可以在初始化时指定也可以在调用split时指定,目标分割列只能是一列") return if not target_dir: target_dir = os.getcwd() else: # 检查文件夹是否存在,不存在就新建 if not os.path.exists(target_dir): os.makedirs(target_dir) print("分割后文件将会被存储在 ",target_dir) split_by = "" if by: split_by = by self.by = by else: split_by = self.by # 指定的列的内容都会被当做字符串处理 self.df[by] = self.df[by].astype(str) # 如果by是列表,并且长度大于1 if isinstance(by,str): newBy = by if isinstance(by,list): if len(by) == 1: newBy = by[0] elif len(by)>=2: newBy = self.__make__() # 找到指定的by列有多少个不同的值,并按照这些值分组 items = set(self.df[newBy].values.tolist()) result_files_list = [] for item in items: dfa = self.df.loc[self.df[newBy]==item] dfa.reset_index(drop=True) # 检查是否指定了子文件的列,如果指定了则按照指定的列生成子文件 if self.subCols: dfx = dfa[self.subCols] else: dfx = dfa filename = "" if self.prefix: filename = self.prefix + self.joinStr + item + ".xlsx" else: filename = item + ".xlsx" dfx.to_excel(target_dir + "\\" + filename,index=False) result_files_list.append(target_dir + "\\" + filename) # 打开目标文件夹 os.startfile(target_dir) return result_files_list if __name__ == '__main__': splitexcel = SplitExcel("一季度大部门人员质量成本.xlsx",subCols=['部门名称', '部门代码', '一季度质量成本'],joinStr="#") results = splitexcel.split(["指定","指定1"],r"D:\projects\项目统计工具\分割文件\文件") print(results)

  

标签:__,分割,python,self,Excel,指定,DataFrame,df,dir
From: https://www.cnblogs.com/xiaoyuquanquan/p/17085802.html

相关文章

  • PHP读取excel(5)
    如果数据量很大的时候,就需要用PHPExcel迭代器逐行读取,具体代码如下:<?phpheader("Content-Type:text/html;charset=utf-8");//引入读取excel类文件require"./PHPExcel/PHPEx......
  • PHP生成excel(1)
    先到PHPExcel官网下载PHPExcel类把excel类包含进来,然后直接使用<?phprequire"./PHPExcel/PHPExcel.php";//实例化excel类$objPHPExcel=newPHPExcel();//获得当前活动she......
  • python读文件
    第一种方法#encoding=utf-8file=open("./man_data.txt","r")try:printfile.read()finally:file.close()第二种方法#encoding=utf-8try:withopen('./man_dat......
  • python数据持久存储:pickle模块的使用
    python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们......
  • python socket 学习
    Python在网络通讯方面功能强大,今天学习一下Socket通讯的基本方式,分别是UDP通讯和TCP通讯。UDP通讯upd服务端1#!/usr/bin/envpython2#-*-coding:utf-8-*-34impor......
  • Python调用HTTP接口并传递cookie
    #get接口调用importurllibimporturllib2get_url="http://10.10.3.63/test?id=123&name=nba"cookie_headers={"Cookie":"person_id=2468"}req=urllib2.Req......
  • python中的a,b=b,a+b怎么解释
     deffib(max):n,a,b=0,0,1whilen<max:yieldba,b=b,a+bn=n+1return'done'这里的 a,b=b,a+b......
  • python virtual environment _ example
        ......
  • Python 虚拟环境 virtualenv 笔记
    初始化virtualenv方式一:virtualenv安装virtualenv,不用sudo的话,是安装到用户home目录下pipinstallvirtualenv#此时如果virtualenv命令还不能用,需要执行......
  • Python TensorFlow深度学习回归代码:DNNRegressor
      本文介绍基于Python语言中TensorFlow的tf.estimator接口,实现深度学习神经网络回归的具体方法。目录1写在前面2代码分解介绍2.1准备工作2.2参数配置2.3原有模型删......