本文为作者原创,转载请注明

文章目录

  • 一、Excel读取
    • 1. ExcelFile类
    • 2. read_excel()方法
  • 二、Excel写入
    • 1. 写入Excel
    • 2. 已有Excel增加sheet
    • 3. 覆盖Excel中已有sheet
    • 4. 已有sheet中追加数据

一、Excel读取

Excel的读取可以采用ExcelFile类和read_excel两种方法,在实际使用中差别不大。其区别可以见e-learn上贴子讨论,观点摘录如下:

  • 除了语法之外没有特别的区别。从技术上讲,ExcelFile是一个类,read_excel是一个函数。在任何一种情况下,实际都是由定义在ExcelFile的_parse_excel解析
  • ExcelFile.parse循环速度更快(存疑)

1. ExcelFile类

类的定义和方法参数感兴趣的可以查看源码
ExcelFile.parse(sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=None, mangle_dupe_cols=True, **kwds)

import pandas as pd
table = pd.ExcelFile('./data/table1.xlsx')
print(type(table))
print(table.sheet_names) ##按顺序获取sheet名称
## 提取表格信息
sheet1 = table.parse(sheet_name=0) #可以使用序号,一次性读取多个用列表[0,1]
sheet2 = table.parse(sheet_name=table.sheet_names[1]) #也可以使用sheet名
print('sheet1:\n{0}\n sheet2:\n{1}'.format(sheet1,sheet2))

输出结果如下:

2. read_excel()方法

pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=None, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, decimal=’.’, comment=None, skipfooter=0, convert_float=None, mangle_dupe_cols=True, storage_options=None)

主要参数 解释
io 文件路径
sheet_name sheet名称,可以是数字或sheet名,默认‘sheet1 ’
header 指定标题行,默认第一行为标题,可以设置多行如[0,1]为标题行
names 在header=None的前提下,补充列名
index_col 用于指定索引,默认为None,设置多列索引index_col=[0,1]
usecols 用于指定读取的列,默认为None,读取第2-4列usecols = [1,2,3]
engine “xlrd”支持.xls,“openpyxl”支持.xlsx
dtype 指定数据列的类型,如{‘a’: np.float64, ‘b’: str}
converters 转换指定列的函数字典{“A”:lambda x: x/100,“B”:lambda x: x/100}
skiprows 省略指定行数的数据,从第一行开始
skipfooter 省略指定行数的数据,是从尾部数的行开始

示例如下:

##可以逐个sheet读取,也可以一次读取
st1 = pd.read_excel('./data/table1.xlsx',sheet_name='1班')
st2 = pd.read_excel('./data/table1.xlsx',sheet_name='2班')
table = pd.read_excel('./data/table1.xlsx',sheet_name=[0,1]) ## 一次性读取 st1 = table[0],st2 = table[1]
print('st1:\n{0}\n st2:\n{1}'.format(st1,st2)) #与上面输出结果相同

使用其他参数

st3 = pd.read_excel('./data/table1.xlsx',sheet_name=1,dtype={'体重': int,'分数': float})
st4 = pd.read_excel('./data/table1.xlsx',sheet_name=1,converters={'身高':lambda x:x*100,'体重':lambda x:x*2})
#Both a converter and dtype were specified for column 体重 - only the converter will be used
st5 = pd.read_excel('./data/table1.xlsx',sheet_name=1,dtype={'体重': int,'分数': float},converters={'身高':lambda x:x*100,'体重':lambda x:x*2})
print('st3:\n{0}\n st4:\n{1}\n st5:\n{2}'.format(st3,st4,st5))

注意:对某一列同时使用dtype和converters,仅仅converter被有效使用

二、Excel写入

1. 写入Excel

有两种方法可以进行写入,使用to_excel方法和ExcelWriter类,如要写入到一个文件中多个sheet,需要使用ExcelWriter类。
ExcelWriter定义如下:
class pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode=‘w’, storage_options=None, if_sheet_exists=None, engine_kwargs=None, **kwargs)
to_excel方法:
DataFrame.to_excel(excel_writer, sheet_name=‘Sheet1’, na_rep=’’, float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep=‘inf’, verbose=True, freeze_panes=None, storage_options=None)
ExcelWriter()可以向同一个excel的不同sheet中写入对应的表格数据
代码如下(示例):

#使用pd.to_excel方法
st5.to_excel('./data/table2.xlsx',sheet_name='newSheet')

ExcelWriter类写入流程:基于已创建的writer对象,利用to_excel()方法将不同的dataframe及其对应的sheet名称写入该writer对象中,并在全部表格写入完成之后,使用save()方法来执行writer中内容向对应实体excel文件写入数据的过程
同python文件IO一样,有两种写入方式。writer应该作为上下文管理器,否则,需要调用close() 保持和关闭打开的文件句柄

第一种:

writer = pd.ExcelWriter('./data/table3.xlsx')
st4.to_excel(writer,sheet_name='st4',index=False)
st5.to_excel(writer,sheet_name='st5',index=False)
##数据写出到excel文件中
writer.save()

第二种:

with pd.ExcelWriter('./data/table4.xlsx') as writer:  st4.to_excel(writer, sheet_name='st4',index=False)st5.to_excel(writer, sheet_name='st5',index=False)

2. 已有Excel增加sheet

mode分为两种写入’w’和追加‘a’,在已有表格中增加sheet使用‘a’模式,指定写入的sheet名称,代码如下(示例):

with pd.ExcelWriter('./data/table4.xlsx',mode='a',engine='openpyxl') as writer:st3.to_excel(writer, sheet_name='st3',index=False)

3. 覆盖Excel中已有sheet

如果需要重新写入Excel中某个sheet,直接往Excel写入同名sheet不会覆盖,而是创建一个新的表单(sheet1),需要采用以下方法

with pd.ExcelWriter('./data/table4.xlsx',mode='a',engine='openpyxl') as writer:wb = writer.book # openpyxl.workbook.workbook.Workbook 获取所有sheetwb.remove(wb['st3']) #删除需要覆盖的sheetst1.to_excel(writer, sheet_name='st3',index=False) ##sheet st3的内容更新成st1值

4. 已有sheet中追加数据

读取原表格的Workbook和sheets,赋给writer句柄,保证数据内容的一致。获取拟写入表单的数据行数,从下一行开始写入,需要设置header = False

import pandas as pd
from openpyxl import load_workbook
newdata = pd.DataFrame([('6','LUCY','F',190,135,90),('7','ROB','M',181,145,78),('8','FRADI','M',176,133,80)])#需要新写入的数据
df = pd.read_excel('./data/table4.xlsx',sheet_name='st4') #读取原数据文件和表
writer = pd.ExcelWriter('./data/table4.xlsx',engine='openpyxl')
book = load_workbook('./data/table4.xlsx')
writer.book = book # openpyxl.workbook.workbook.Workbook
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) #{'st4': <Worksheet "st4">, 'st5': <Worksheet "st5">, 'st3': <Worksheet "st3">}
df_rows = df.shape[0] #获取原数据的行数
newdata.to_excel(writer, sheet_name='st4',startrow = df_rows + 1, index = False, header = False)#将数据写入excel中的st3,从第一个空行开始写
writer.save()#保存

pandas读写Excel详解相关推荐

  1. python pandas read_excel 参数详解 to_excel 读写Excel

    Python 读写 Excel 可以使用 Pandas,处理很方便.但如果要处理 Excel 的格式,还是需要 openpyxl 模块,旧的 xlrd 和 xlwt 模块可能支持不够丰富.Pandas ...

  2. 【转】用VB操作Excel详解

    用VB操作Excel详解 一. VB读写EXCEL表: VB本身提自动化功能可以读写EXCEL表,其方法如下: 1.在工程中引用MicrosoftExcel 类型库: 从"工程"菜 ...

  3. .NET NPOI导出Excel详解

    http://www.cnblogs.com/yinrq/p/5590970.html .NET NPOI导出Excel详解 NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是 ...

  4. python echarts接口_python绘图pyecharts+pandas的使用详解

    pyecharts介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒 为避免绘制缺 ...

  5. C#NPOI导出Excel详解

    C#NPOI导出Excel详解 开发工具与技术:工具:Visual Studio/C#.Net,技术:C# 作者:刘胜 撰写时间:2019-05-08 NPOI简介 NOP是一个开源的C#读写Exce ...

  6. 数据分析从零开始实战,Pandas读写Excel/XML数据

    点击查看第一篇文章: 数据分析从零开始实战,Pandas读取HTML页面+数据处理解析_ 数据分析 从零开始到实战,Pandas读写CSV数据_ 数据分析 从零开始到实战,Pandas读写CSV数据 ...

  7. python pandas读取excel-Python使用Pandas读写Excel实例解析

    这篇文章主要介绍了Python使用Pandas读写Excel实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pandas是python的一个 ...

  8. 基于MIG控制器的DDR3读写控制详解

    基于MIG控制器的DDR3读写控制详解 目的:详细介绍FPGA中基于MIG IP核控制的DDR3详细控制及内部逻辑 平台:AX7350-Xilinx 软件:Vivado 2017.4 1.MIG IP ...

  9. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

最新文章

  1. Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDI
  2. [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
  3. python-内置函数-数学函数
  4. Broadcom获得65亿美元过度贷款以收购Brocade
  5. 十大经典排序算法1(Python版本)
  6. 特斯拉两高管被爆离职,股价狂跌超过10%,马斯克宣布高层大换血
  7. html用ajax做三级联动,怎样使用JS+AJAX做出三级联动
  8. DataFrame数据转为list,再逐行写入Excel
  9. C#中IL反汇编工具的使用 其具体含义如下文
  10. python文件怎么打开_py文件怎么打开?
  11. Ubuntu20安装卸载MySQL8.0
  12. 【小刘带你玩儿前端】什么是跨域以及如何解决?小刘带你轻松拿彻底解决~
  13. 买牛奶 (c++基础)
  14. 企业微信(h5页面嵌入企业微信)的分享总结
  15. 头盔-看完就不会买错的VR头盔攻略:VR头盔到底选哪个?
  16. Elasticsearch许可证过期导致ES用不了的问题
  17. UVA 1471 Defense Lines (LIS变形)
  18. 浅谈城市大脑与智慧城市发展趋势
  19. 金山贝壳arp引起的不能上网故障
  20. Unity 交通系统

热门文章

  1. cesium实现键盘控制地图场景漫游效果
  2. 分享笔记1 之《白帽子讲web安全》
  3. 小学数学与计算机整合课优质教案,深研数学教材,目标精准把握 记“小学数学拓展性、整合性课程——基于数学的拓展课程”片区教研活动...
  4. GMAT最新题型介绍及真题讲解
  5. iPhone 15全系列即将登场:英国巴克莱银行预测PRO系列售价或涨100到200美元,换来的是游戏效能提升!
  6. Navicat 提示Cannot create oci environment 解决方案
  7. JSP只展示3行, 鼠标放上展示所有
  8. 论randperm函数的原理
  9. dijikstra(先预处理)+dfs,relocation truncated to fit
  10. 一粒云磁盘扩容和组建raid