一、读取Excel文件

  read_excel()   # 读取excel文件(需要安装xlrd和openpyxl两个模块)

  1、方法使用了Python的 xlrd 模块来读取Excel2003(.xls)版本的文件,而Excel2007(.xlsx)及以上版本的使用了xlrd 或者 openpyxl 模块来读取的。

  2、在大多数基本的使用案例中,read_excel会读取Excel文件通过一个路径,并且sheet_name会表明需要解析哪一张表格。语法:pd.read_excel("文件路径名.xlsx", sheet_name="表格名称")

  3、为了更方便地读取同一个文件的多张表格,ExcelFile类可用来打包文件并传递给read_excel。因为仅需读取一次内存,所以这种方式读取一个文件的多张表格会有性能上的优势。语法如下

xlsx = pd.ExcelFile("unit.xlsx")
xlsx.sheet_names  # 以列表形式返回工作薄中所有工作表的表名
df = pd.read_excel(xlsx, "sheet1")  # 指定获取unit.xlsx工作薄中的sheet1工作表

  4、ExcelFile类也能用来作为上下文件管理器。

with pd.ExcelFile("./unit.xlsx") as xlsx:
df1 = pd.read_excel(xlsx, "Sheet1")
df2 = pd.reda_excel(xlsx, "Sheet2")

  5、ExcelFile一个主要的用法就是用来解析多张表格的不同参数:

data = {}
# 当Sheet1的格式不同于Sheet2的格式时
with pd.ExcelFile('path_to_file.xls') as xls:
data['Sheet1'] = pd.read_excel(xls, 'Sheet1', index_col=None, na_values=['NA'])
data['Sheet2'] = pd.read_excel(xls, 'Sheet2', index_col=1)

  6、注意如果所有的表格解析同一个参数,那么这组表格名的列表能轻易地传递给read_excel且不会有性能上地损失。

# 使用ExcelFile类
data = {}
with pd.ExcelFile('./unit_data.xls') as xls:
data['公安局'] = pd.read_excel(xls, '公安局', index_col=None,
na_values=['NA'])
data['就业局'] = pd.read_excel(xls, '就业局', index_col=None,
na_values=['NA']) # 等价于read_excel函数
data = pd.read_excel('unit_data.xls', ['公安局', '就业局'],
index_col=None, na_values=['NA'])

  7、指定表格

     注意:在read_excel第二个参数是 sheet_name, 不要同 ExcelFile.sheet_names 搞混淆了

       ExcelFile的属性 sheet_names 提供的是多张表格所生成的列表。

  • sheet_name 参数允许指定单张表格或多张表格被读取。
  •  sheet_name 的默认值是0,这表明读取的是第一张表格
  •  在工作薄里面,使用字符串指向特定的表格名称。
  •  使用整数指向表格的索引,索引遵守Python的约定从0开始的。
  •  无论是使用一组字符串还是整数的列表,返回的都是指定表格的字典。
  •  使用 None 值则会返回所有可用表格的一组字典。
# 返回一个DataFrame
pd.read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])

  使用表格索引:

# 返回一个DataFrame
pd.read_excel("path_to_file.xls", 0, index_col_None, na_values=["NA"])

  使用所有默认值:

# 返回一个DataFrame,默认sheet_name=0
pd.read_excel('path_to_file.xls')

  使用None获取所有表格:

# 返回DataFrames的字典
pd.read_excel('path_to_file.xls', sheet_name=None)

  使用列表获取多张表格:

# 返回第一张和第四张纸,作为DataFrames的字典。
pd.read_excel('path_to_file.xls', sheet_name=['Sheet1', 3])

  read_excel能读取不止一张表格,通过sheet_name能设置为读取表格名称的列表,表格位置的列表,还能设置为None来读取所有表格。多张表格能通过表格索引或表格名称分别使用整数或字符串来指定读取。


MultiIndex读取

  read_excel能用MultiIndex读取多个索引,通过index_col方法来传递列的列表和header将行的列表传递给MultiIndex的列。无论是index还是columns,如果已经具有序列化的层级名称,则可以通过指定组成层级的行/列来读取它们。

# 例如,用MultiIndex读取没有名称的索引:
df = pd.DataFrame({"a":[1,2,3,4], "b":[5,6,7,8]},
index=pd.MultiIndex.from_product([["a","b"],["c","d"]])) df.to_excel("abc.xlsx",sheet_name="temp.xlsx") df = pd.read_excel("abc.xlsx",index_col=[0,1]) df
# out:
     a  b
a c 1 5
d 2 6
b c 3 7
d 4 8
 

解析特定的列

  常常会有这样的情况,当用户想要插入几列数据到Excel表格里面作为临时计算,但是你又不想要读取这些列的时候,read_excel提供的usecols方法就派上用场了,它让你可以解析指定的列。

  语法:pd.read_excel("路径", sheet_name="表名", usecols=[0,2,3])  # 表示只显示0,2,3列,注意点是顺序是被忽略的,usecols=[0,1] 等价于 [1,0]


解析日期

  当读取excel文件的时候,像日期时间的值通常会自动转换为恰当的dtype(数据类型)。但是如果你有一列字符串看起来很像日期(实际上并不是excel里面的日期格式),那么你就能使用parse_dates方法来解析这些字符串为日期:

  例:pd.read_excel('path_to_file.xls', 'Sheet1', parse_dates=['列索引'])


单元格转换

  Excel里面的单元格内容是可以通过converters方法来进行转换的。例如,把一列转换为布尔值:

  例: pd.read_excel('path_to_file.xls', 'Sheet1', converters={'列索引': bool, "身份证列":str})

  这个方法可以处理缺失值并且能对缺失的数据进行如期的转换。由于转换是在单元格之间发生而不是整列,因此不能保证dtype为数组。例如一列含有缺失值的整数是不能转换为具有整数dtype的数组,因为NaN严格的被认为是浮点数。你能够手动地标记缺失数据为恢复整数dtype:

  

def cfun(x):
return int(x) if x else -1 pd.read_excel('path_to_file.xls', 'Sheet1', converters={'列字段名': cfun})

  数据类型规范

  作为另一个种转换器,使用dtype能指定整列地类型,它能让字典映射列名为数据类型。使用strobject来转译不能判断类型的数据:

  

pd.read_excel('path_to_file.xls', dtype={'列字段名1': 'int64', '列字段名2': str})

二、to_excel()   # 写入excel文件到指定磁盘中

  df.to_excel("path_to_file.xlsx", sheet_name="sheet1")  # 第一个参数是excel文件的名字,第二个是表的名字。

  DataFrame将尝试以模拟REPL(“读取-求值-输出" 循环的简写)输出的方式写入。index_label将代替第一行放置到第二行,你也能放置它到第一行通过在to_excel()里设置merge_cells选项为False:

  

df.to_excel('path_to_file.xlsx', index_label='label', merge_cells=False)

  为了把DataFrames数据分开写入Excel文件的不同表格中,可以使用ExcelWriter方法。

with pd.ExcelWriter('path_to_file.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet2')

  注意:为了从read_excel内部获取更多点的性能,Excel存储所有数值型数据为浮点数。但这会产生意外的情况当读取数据的时候,如果没有损失信息的话(1.0 --> 1),pandas默认的转换整数为浮点数。你可以通过convert_float=False禁止这种行为,这可能会在性能上有轻微的优化。 


  写入Excel文件到内存

  Pandas支持写入Excel文件到类缓存区对象如StringIOBytesIO,使用ExcelWriter方法。

#安全导入到Python 2.x或3.x
try:
from io import BytesIO
except ImportError:
from cStringIO import StringIO as BytesIO bio = BytesIO()
#通过在ExcelWriter构造函数中设置“引擎”。
writer = pd.ExcelWriter(bio, engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1') # 保存工作簿
writer.save() # 从头开始查找并读取以将工作簿复制到内存中的变量
bio.seek(0)
workbook = bio.read()

Excel写入引擎 

Pandas选择Excel写入有两种方式:

  1. 使用engine参数
  2. 文件名的扩展(通过默认的配置方式指定)  

  为了指定你想要使用的写入方式,你可以设置引擎的主要参数为to_excelExcelWriter。内置引擎是:  

  • openpyxl: 要求2.4或者更高的版本。
  • xlsxwriter
  • xlwt
# 通过在DataFrame的“ to_excel()”方法中设置“引擎”。
df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', engine='xlsxwriter') #通过在ExcelWriter构造函数中设置“引擎”。
writer = pd.ExcelWriter('path_to_file.xlsx', engine='xlsxwriter') # 或通过pandas配置。
from pandas import options # noqa: E402
options.io.excel.xlsx.writer = 'xlsxwriter' df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')

样式

通过pandas产生的Excel工作表的样式可以使用DataFrameto_excel方法的以下参数进行修改。

  • float_format:格式化字符串用于浮点数(默认是None)。
  • freeze_panes:两个整数的元组,表示要固化的最底行和最右列。这些参数中的每个都是以1为底,因此(1, 1)将固化第一行和第一列(默认是None)。

使用XlsxWriter引擎提供的多种方法来修改用to_excel方法创建的Excel工作表的样式。你能在XlsxWriter文档里面找到绝佳的例子:https://xlsxwriter.readthedocs.io/working_with_pandas.html


pd.merge(left, right, on=[], how="inner") # 可以指定按照两组数据的共同键值对合并或者左右各自

    参数left:表示左数集

    参数right:表示右数集

    参数on:表示要加入的列(名称)。 必须在左右DataFrame对象中都找到。

    参数left_on,right_on:当两个表里没有完全一致的列名,但是有信息一致的列,需要比对时只需要传入两列的列名即可比对。

    参数how:表示集合方式,以何种方式连接,有四个参数可选,left表示左交集,right表示右交集,inner表示共有数据,outer表示左右交集有没有都全部显示。

pandas学习之 - excel篇的更多相关文章

  1. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  2. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  3. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  4. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  5. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  6. pandas 学习 第2篇:Series -(创建,属性,转换和索引)

    序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...

  7. pandas 学习 第1篇:pandas基础 - 数据结构和数据类型

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...

  8. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  9. pandas 学习 第十一篇:处理缺失值

    Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...

  10. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

随机推荐

  1. CI2454 低成本高性能SOC产品 遥控产品的绝佳选择

    Ci2454 是一款集成无线收发器和 8 位 RISC(精简指令集)MCU 的 SOC 芯 片. 无线收发器特性:  工作在 2.4GHz ISM 频段.  调制方式:GFSK/FSK.  数据 ...

  2. 关于Python 面向对象寻值的问题. How the number be found in the OOP in Python

    今天在看Python面向对象的时候看到了一个很有意思的问题 Today. When i learning the OOP in python , I found a very interesting ...

  3. pytorch的三种量化方式详解

    pytorch的三种量化方式详解 这篇博客详细介绍了pytorch官方教程提到的三种量化方式的原理,详细解释了三种量化方式的区别: 1. 静态量化 :torch.quantize_per_tensor ...

  4. 自己写的java教程,免费分享

    自己写的一套java教程,主要用于内部培训使用,有需要的可以直接免费下载: http://it.zhenzikj.com/download/java.zip 一共写了3套: java语言基础.网络开发 ...

  5. Linux 第五节 (shell脚本while循环,case,计划任务,用户及权限)

    #!/bin/bash #this is a test script PRICE=$(expr $RANDOM % 1000)   //将随机得出的数字取余 TIMES=0 while true do ...

  6. vue学习之-----组件递归调用

    1.关键点 2.父组件 <template> <div> <div class="btn-title"> <el-button @clic ...

  7. java-文件IO常用操作对比

    文件IO中,常用的方法如下方代码中的readMethod1~8方法所示. 测试了2.5M读100次.100M读3次.250M读1次三种情况,耗时(单位:毫秒)如下: 2.5M读100次 2.5M读10 ...

  8. argocd

    argocd Argo CD - Declarative GitOps CD for Kubernetes (argo-cd.readthedocs.io) What Is Argo CD Argo ...

  9. Kubernetes理论知识

    一.k8s概念 Kubernetes(k8s)是跨主机集群的自动部署.扩展以及运行应用程序容器的开源平台,这些操作包括部署,调度和节点集群间扩展. master node:主节点 Master 是 C ...

  10. tensorflow-gpu安装遇到的坑

    tensorflow-gpu安装好导入,一直出现以下错误 折腾了好久. 错误之前也按照中国官网安装及配置各环境变量:https://tensorflow.google.cn/install/gpu 其 ...