跟使用VBA处理一样的方法,直接定义要合并的区域:
大竹网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联成立于2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
mergeCell=shellname['A1:A3']
其中shellname是表格的名字
完整的函数如下:
openpyxl.worksheet.merge.MergeCells(count=None, mergeCell=())
假设我有3个不同的清单
col1 = ['2006-03-28','2006-04-05','2006-04-06']col2 = ['IBM', 'MSFT', 'IBM']col3 = [1000, 1000, 500]
将这些列表合并到另一个列表中的最有效方法是:
col = [('2006-03-28', 'IBM', 1000),
('2006-04-05', 'MSFT', 1000),
('2006-04-06', 'IBM', 500)]
解决方案
col1 = ['2006-03-28','2006-04-05','2006-04-06'] col2 = ['IBM', 'MSFT', 'IBM'] col3 = [1000, 1000, 500] zip(col1, col2, col3)[('2006-03-28', 'IBM', 1000), ('2006-04-05', 'MSFT', 1000), ('2006-04-06', 'IBM', 500)]
如果您的列已在一个列表中,则可以使用 zip(*cols)
【第一个问题】
如果打开文件下多个文件(不包含子目录):
import glob
for filename in glob.glob(r"f:/py/*.py"):
file = msoffcrypto.OfficeFile(open(filename, "rb"))
……
【第二个问题】
第二个问题提示'df0'没有声明,建议参考下concat用法
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True):
pd.concat()只是单纯地把两个表拼接在一起,参数axis用于指定是行还是列,axis默认是0。当axis=0时,pd.concat([obj1, obj2])的效果与obj1.append(obj2)是相同的;当axis=1时,pd.concat([obj1, obj2], axis=1)的效果与pd.merge(obj1, obj2, left_index=True, right_index=True, how=‘outer’)是相同的。objs:需要连接的对象集合,一般是列表或字典;axis:连接轴向;join:参数为‘outer’或‘inner’;join_axes=[]:指定自定义的索引; keys=[]:创建层次化索引;ignore_index=True:重建索引
df = pd.read_excel(decrypted)
print(df)
data = pd.concat([df0, df1, ...], axis=0)
从你给的代码中看不出上面黑体标注的变量有些什么样的关系……
在日常工作中经常回用到数据分析与统计工作,而在实施数据分析之前,最为最要的就是数据的搜集、整理工作。这里介绍一下多个相同格式的excel合并的处理。如果在excel文件表比较少时,手工合并还可以应付,当几十个几百个甚至更多的表时,手工合并效率会非常低,于是让计算机自动合并处理,帮助我们完成工作就显得非常有必要。
比如,在“2019年集团大学生招聘”下有两个表格,想要实现的是将这两个表格数据合并。
各个表中的数据格式如下图:
结果:
有时候表格存放在文件夹下,现在需要将不同文件夹下的表格合并,此时需要对程序进行简单的修改。
文件目录结构如下:
在此之前需要先了解一下os模块中的walk方法:
结果:
注意:os.walk()方法,它可以查询到目录下不同文件夹中的文件。其中,x代表的是文件路径,y代表的是目录下的文件夹,z代表的是目录下的文件。
结果:
最后,需要注意,以上只是一个简单的程序,对于数据量不是很大的场景,可以放心使用。但当数据量非常大时,程序还需要进一步优化,因为程序是将所有的数据保存在一个列表中,最后再一次性写入excel表中,这里需要考虑excel版本是否支持大数据量的写入,另外,也要考虑程序资源消耗的问题,内存可能不足。
append 方法根据行在原数据框添加新的数据框。
如果想要合并后的数据框索引重写排序,可以设置参数 ignore_index=True 。
concat 函数是panda自带的,可以按行或按列合并多个pandas数据框。
按行合并多个数据框,需要注意的是 objs参数接受一个可迭代对象 。concat函数默认按行合并。
设置 ignore_index=True ,使合并后的数据框索引重新排序。
按行合并时,concat对所有的列进行全连接(参数 join='outer' ),没有的列会填充为NaN。
设置参数 join='inner' ,可以只保留共有的列。
设置参数 axis=1 或 axis='columns' ,可以按列合并多个数据框。
merge 方法根据列或索引连接数据框。
当两个数据框只有一个相同列时, merge 方法会自动根据相同列进行内连接, on 参数可以省略。
设置参数 how=['left','right','outer','inner','cross'] ,可以完成不同类型的连接。
当两个数据框没有相同列时,需要设置 left_on 和 right_on 参数,表示按这两列进行连接。
如果需要根据数据框的索引进行连接,需要根据需求设置参数 left_index=True 或者 right_index=True 。
设置 suffixes ,可以给相同的列名添加后缀。默认后缀是 _x , _y 。
join 方法与 merge 方法作用相同,基本上 merge 方法已经可以完成所有的连接操作。
join 方法对按索引连接更方便而已。
当连接的两个数据框中没有相同列时,可以直接按索引进行左连接。
同样,可以设置 how 参数,控制连接的行为。
当数据框中有相同列时,需要设置后缀。
先来看看openpyxl库的官方说明:openpyxl is a Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files.这个库是针对2010 及以上Excel文档的,笔者测试过2007是会报错的。
Python使用openpyxl库在实际的应用中可以提高效率。本文分享测试两个案例。
1、修改统计文档数据
读取表中数据,计算平均分和总分,并且保存到最后两列,最后再写入到文件中。
2、多文档合并
这个在实际的生活中可是大有用处。试想一下现在有很多报名表,需要将报名表集中在一起,那么只能一个个打开文档复制粘贴,太低效率了。Python使用openpyxl库就可以很快的完成将目录下的.xlsx文件合并在一起。
get_all_xlsx_files函数的作用是找到目录下的xlsx文件,并按照文件名进行排序;
merge_xlsx_files函数的作用是通过获取表中数据,然后调用ws.append函数添加到汇总表的后面。
main主函数执行合并操作,并写入汇总文件中。
合并效果如下: