⑴ python把excel第一列相同的分类
Python操作excel文件根据某一字段将相同的类拆分。
需要安装pandas,xlrd,openpyxl库。
定义新列需要用到columns.tolist()函数,具体代码如下:col_name=df.columns.tolistcol_name.insert(新列位置,'新列名称')wb=df.reindex(columns=col_name)然后后面再接一行代码用来定义新列的计算规则。
⑵ 关于Excle表格如何拆分
首先,打开需要拆分单元格的Excel表格。
⑶ Python操作Excel实现自动化报表
Python操作Excel实现自动化报表
安装
python -m pip install xlrd xlwt xlutils。
基本用法
1.从指定文件路径读取excel表格,进行一定操作,然后保存到另一个excel文件:result.xlsx
import xlwt
import xlrd
from xlutils. import
import pandas as pd
from pandas import DataFrame,Series
import os
os.chdir('./')
# 从指定文件路径读取excel表格
df = pd.read_excel('D:/mypaper/data/data.xlsx')
# 查看df内容
# 根据age算出出生年份,增加一列
import datetime
import os
year = datetime.datetime.now().year#获取当前系统时间对应的年份
df['birth'] = year-df['age']
df.to_excel('result.xlsx')#保存到当前工作目录,可以用os.getcwd()查看
#查看下此时df的内容,可以看到已经生成了birth这一列。
2.单元格操作
# 定义方法:读取指定目录下Excel文件某个sheet单元格的值
def excel_read(file_path,table,x,y):
data = xlrd.open_workbook(file_path)
table = data.sheet_by_name(table)
return table.cell(y,x).value
# 定义方法:单元格值及样式
write_obj_list = []
def concat_obj(cols,rows,value):
write_obj_list.append({'cols':cols,'rows':rows,'value':value,
'style':xlwt.easyxf('font: name 宋体,height 280;alignment: horiz centre')})
# 定义方法:合并单元格
def merge_unit(srows,erows,scols,ecols,value):
write_obj_list.append({'id':'merge','srows':srows,'erows':erows,'scols':scols,
'ecols':ecols,'value':value,'style':xlwt.easyxf('font: name 宋体,height 280;alignment: horiz centre')})
# 定义方法:更新excel
excel_update(file_path,write_obj_list,new_path):
old_excel = xlrd.open_workbook(file_path, formatting_info=True)
#管道作用
new_excel = (old_excel)
'''
通过get_sheet()获取的sheet有write()方法
'''
sheet1 = new_excel.get_sheet(0)
'''
1代表是修改第几个工作表里,从0开始算是第一个。此处修改第一个工作表
'''
for item in write_obj_list:
if 'id' not in item.keys():
if 'style' in item.keys():
sheet1.write(item['rows'], item['cols'], item['value'],item['style'])
else:
sheet1.write(item['rows'], item['cols'], item['value'])
else:
if 'style' in item.keys():
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'],item['style'])
else:
sheet1.write_merge(item['srows'],item['erows'],item['scols'], item['ecols'], item['value'])
'''
如果报错 dict_items has no attributes sort
把syle源码中--alist.sort() 修改为----> sorted(alist)
一共修改2次
'''
new_excel.save(file_path)
#参数详解
# srows:合并的起始行数
# erows:合并的结束行数
# scols:合并的起始列数
# ecols:合并的结束列数
# value:合并单元格后的填充值
# style:合并后填充风格:
# font: name 宋体
# height 280;
# alignment: horiz centre
# ... 与excel操作基本保持一致
(注意:该方法仅仅是将需要直行的动作保存到一个list中,真正的动作还未执行,执行动作是发生在excel_update方法中)
最终调用excel_update方法,传入每个单元格需要进行的操作和填充值的write_obj_list以及文件保存路径file_path,就可以在当前工作目录下生成想要的Excel结果文件。
注意:
1.write_obj_list支持用户自定义
2.write_obj_list也可以是根据excel_read方法读取现有待修改的excel文件(可以维持原有表格的格式)而生成
End
⑷ 用Python拆分EXCEL,一行一个表
EXCEL最多能有256个表吧。若能生成1000个表,也没有使用价值。
想每一行单独打印,可以用WORD的邮件功能。
⑸ Python带格式拷贝excel表格(从A拷贝到B)
使用openpyxl包 从表A.xlsx 完全拷贝数据到表B.xlsx openpyxl这个包不支持xls格式的excel文件
如果A.xlsx中的数据有用到公式自动求和的,在读取A.xlsx中的的数据的时候 需要
load_workbook(A.xlsx,data_only=True)这样加第二个参数 只读取数据否则读出来的就是公式.
下面是重点如果A.xlsx中的表格带有填充颜色 合并单元格字体格式 等等需要如下这样做
myfile = A.xlsx
targFile = B.xlsx
wb = load_workbook(myfile,data_only=True)._sheets #原要拷贝单元格
wb2 = load_workbook(targFile) # 目标单元格
wr = wb[index]
ws = wb2._sheets[1]
# 两个for循环遍历整个excel的单元格内容
for i, row in enumerate(wr.iter_rows()):
for j, cell in enumerate(row):
ws.cell(row=i + 1, column=j + 1, value= cell.value) #拷贝数值
ws.cell(row=i + 1, column=j + 1).number_format=cell.number_format #拷数字格式
ws.cell(row=i + 1, column=j + 1).alignment = .(cell.alignment) #
ws.cell(row=i + 1, column=j + 1).font = .(cell.font) #拷贝字体
ws.cell(row=i + 1, column=j + 1).border = .(cell.border) #拷贝值
ws.cell(row=i + 1, column=j + 1).fill = .(cell.fill) #拷贝填充颜色
for merg in wr.merged_cells:
ws.merge_cells(str(merg)) #合并单元格
wb2.save(targFile)
这样数据就能完美的从从A拷贝到B啦.格式样式完全一样.
但是 也有两个我没有攻克的问题 在这里说一下吧 希望有大佬能解决并告知在下 ,不胜感激
问题一 从表A中拷贝数据到表B以后 如果表B里面也设置了对数据的公式计算,这个时候 如果不打开表B,直接再把表B里面求和的数据 拷贝到表C的话 数值是拷贝不过去的.打开表C会发现没有数值,我查了一些资料 好像是说 表B里面的数 如果是像上面这样拷贝过去然后通过公式直接计算的值 没有保存上. 所以 要想把数值拷贝到C或者读出来的话 ,需要手动打开表B然后,关闭的时候保存一下才可以.这是问题一. 因为我遇到了一个这样的需求,需要连续拷贝从A拷到B,再把B里面求和的数据拷到C.希望有大佬能够指点一下
问题二就比较神奇了
我把表A里面的数据拆分拷贝到了另外五个汇总的表格里面,这五个其中有一个打开以后会报错,显示 excel文件格式错误.这五个表格在拷贝数据以前就已经存在了,那个时候打开都是没有问题的,只有在拷贝完数据以后会报错,我也不清楚具体的原因. 查了一些资料以后知道,excel表格其实是一种特殊的压缩包,只要把后缀改成zip就可以打开这个压缩文件,然后我找到报错的那个文件,然后用这个报错的文件和正常的文件里面这个去做了对比,发现莫名其妙的多了一些东西,删除掉以后再打开就正常了. 这也是我没有解决的问题,希望有大佬能够指点一二 具体的报错 截图 就是文章中附带的截图
⑹ Python怎么在Excel中把一个单元格里的内容拆分提取
如果格式都是数字、名称+空格这种模式,可以统一正则出来,('\d、\w+\s)
⑺ 如何用python3 将一个大的excel文件(.xlsx)分割为多个excel的文件,sheet 不变。以下是我的代码:
我觉得你要处理数据的话最好用数据库,把excel中的数据读入到数据库中再处理就很轻松了。用python本身支持的sqlite就够了,才800多兆而已。
⑻ python处理excel完整版
**1.2.1 新建保存工作簿(覆盖创建)
获取当前活动工作表的:
以索引值方式获取工作表:
以工作表名获取: wb['工作表名'],注意,此表达方式为切片显示,所以没有成员提示。很少用
循环工作表:很好用,一般用sheetnames
获取所有工作表名:wb.sheetnames
获取指定工作表名
修改工作表名称
新建工作表时的默认工作表名:
workbook.remove(工作表)
A1 表示法: 工作表['A1'] ,R1C1 表示法:工作表.cell(行号,列号)
2.工作表['起始行号': '结束行号']或者工作表['起始行号: 结束行号'],此方法是按行读取的数据。
3.工作表['起始列号': '结束列号']或者工作表['起始列号: 结束列号'],
此方法是按列读取的数据。
4.获取(按行)指定工作表所有已用数据:
list(workbook.worksheets[索引值].values)
按行求和(方法 1)
按行求和(方法 )
按列统计平均值
按行获取工作表使用区域数据:worksheet.rows
按列获取工作表使用区域数据:worksheet.columns
获取工作表中最小行号:worksheet.min_row
获取工作表中最小列号:worksheet.min_column
获取工作表中最大行号:worksheet.max_row
获取工作表中最大列号:worksheet.max_column
获取单元格的行号:cell.row
获取单元格的列号:cell.column iter
方法获取指定区域:
1.按行获取指定工作表单元格区域:worksheet.iter_rows(……)
2.按列获取指定工作表单元格区域:worksheet.iter_cols(……)
可以通过 min_row、min_col、max_col、max_row 这几个参数进行单元格区域的控制
A1 表示法:工作表['A1']=值,R1C1 表示法:工作表.cell(行号,列号,值)
在最后一行写入数据:工作表.append(列表)
1.10.2 实例应用(九九乘法表)
最后加一列写优秀
⑼ Python处理Excel文件(csv, xls, xlsx)
Excel文件格式主要有csv,xlsx和xlsx,对于不同的格式,我们使用不同的包来进行处理。
其中, encoding='utf-8-sig' 是为了编码正常可以正确显示中文, spamreader 中的每一个 row 为list格式,可以循环取出每个单元格的值。
结果:
如果csv文件是数据类的,那么使用 pandas 包读写数据会更方便。
结果:
参数:
结果:
参数:
Excel文件有三层对象:工作薄、工作表和三元格,分别对应 openpyxl 包中的workbook、sheet和cell。
注 : openpyxl 功能全面,还支持:合并单元格、数学运算、单元格格式、迭代器 ws.iter_rows() 操作等。
注 : xlrd 打开为只读模式,不可修改。
结果:
结果: