Python 高级:从 Pandas 库读取、获取、拆分和写入数据!
1。 pandas 的介绍
Pandas 是一个强大的数据分析库。 Series 和 DataFrame 数据结构使得处理二维表格数据变得非常容易。 基于后面处理Excel表格数据的需要,有时候使用Pandas库处理表格数据会更加轻松简单,所以这里不得不说一下。 Pandas 库是一个极其丰富的库,但这里并未涵盖所有内容。这里主要讲的是如何利用Pandas库来实现“读表”、“获取表”和“合并表”te完成任务。事实上,Pandas 能执行的功能远不止这些。如何使用这个库来实现数据清晰度和创建图表超出了本书的范围。你可以继续研究这个库。 在使用这个库之前,必须先导入它。为了便于使用,通常将此库命名为 pd。当我们在本书中遇到PD时,我们谈论的是Pandas。2。读取Excel数据
Pandas支持读取CSV、Excel、Json、HTML、Database等多种形式的数据,非常强大。但这里我们仅以读取Excel文件为例来介绍如何使用Pandas库读取本地Excel文件。 在Pandas库中,pd.read_excel()函数用于读取Excel文件。这个功能之所以强大,是因为我们可以使用很多参数,这使得我们读取Excel文件变得更加容易。这里我们只讨论四个通用参数:工作表名称、标题、usecols 和名称。①工作表名称参数详解
我们知道一个Excel文件就是一个工作簿,一个工作簿有多个工作表,每个工作表包含一个数据表。 sheet_name 参数帮助我们选择要读取的工作表。具体用法如下。 sheet_name=正整数值,等于0表示读取第一张,等于1表示读取第二张,以此类推。 sheet_name="sheet name",我们可以通过每张sheet的名称来读取不同的sheet,更加方便灵活。 注:如果不指定该参数,则默认读取第一张。? Name"df = pd.read_excel("readexcel.xlsx",sheet_name="考试成绩单")df结果如下:

②表头参数详细解释
有时候太读取的Excel文件可能有也可能没有标题行,但是默认情况下会读取第一行作为标题行,这对于没有标题行的Excel文件来说不太适合,所以header参数可以很好的解决这个问题 header=None,主要针对没有标题行的Excel文件,系统不使用第一行数据作为标题,而是默认标题1,2,3... header=正数整数值,指定哪一行作为标题行。 ? header=正整数df = pd.read_excel("readexcel.xlsx",sheet_name="基本信息表", header=1)df结果如下:

③usecols参数详解
如果一个表有很多列,如果你想只读取表中的指定列,使用usecols参数是一个不错的选择。 关于usecols参数,使用方法有很多种,我们将分别进行说明。 usecols=None 表示选择表中的所有列。默认情况下,不指定该参数,这也意味着必须选择表中的所有列。 usecols=[A,C]表示选择A列(第一列)和C列(第三列)。其中usecols=[A,C:E]表示选择A列、C列、D列和E列。 usecols=[0,2]表示选择第一列和第三列。? df = pd.read_excel("readexcel.xlsx",sheet_name="考试成绩表",usecols="A:B")df结果如下:

④详细解释名称参数
如果表格没有标题行,我们需要为其提供标题。使用参数名称,我们可以在读取数据时为表提供标题。 names=["列名1","列名2"...]:传递一个包含每列的列名的列表。 name_list = ["学号","姓名","性别","城市"]df = pd.read_excel("readexcel.xlsx",sheet_name="copy",header=None , names= name_list)
df结果如下:

3. Excel数据的获取
知道了如何读取Excel文件中的数据后,接下来我们需要学习如何灵活地获取Excel表格的位置数据中的数据。 这里我一共提供了5种需要掌握的数据获取方法,分别是“访问一列或多列”、“访问一列或多行”、 “访问单元格中的值”,“访问多行和多列”。① 什么是“位置索引”和标签索引

③ 访问一列或多列columns rows Line
“访问一行或多行”的方法较多,所以特别容易出错,需要特别注意。一 方法一:访问一行 #位置索引df .iloc [ 0]
#标签索引
df.loc[“区域1”方法2:访问多行#位置索引
df.iloc[[0,1,3]]
# Tagindex
df.loc[["区域 1", "区域 2", "区域 4"] ] 访问单元格中的特定值 有多种方法可以“访问单元格中的特定值”单元格中的某个值”,“位置索引”或“标签索引”。 ? “访问多行多列”,方法还有更多。我一共给大家总结了5种方法。第一种,iloc + slice;第二个,loc + 标签数组;第三种,iloc+切片+位置数组;第四种,loc+切片+标签数组。? 3 这两行中的武汉、孝感、广水列
df.loc[["区域 1", "区域 3"], ['武汉', '孝感', '广水']] 方法 3 : iloc+slice+position数组#选取所有行的第2、5列数据
df.iloc[:,[1,4]]方法四:loc+slice+label数组 # 选择区域1和区域2两行中的武汉和广水列
df.loc[:"区域2":,["武汉","广水"]]
4.如何拆分Excel数据
合并多个表格时,我们需要将多个表格的数据垂直(上下)拆分。在pandas中,可以直接使用pd.concat()函数完成表的垂直串联。 至于pd.concat()函数,它的用法其实很简单。有一个ignore_index参数需要我们注意。 ignore_index=True 表示忽略原始索引并生成一组新索引。 如果不使用ignore_index参数df1 = pd.read_excel("concat.xlsx",sheet_name="Sheet1")df2 = pd.read_excel("concat.xlsx",sheet_name="Sheet2 ")
pd.concat([df1,df2],ignore_index=True)结果如下:

df2 = pd.read_excel("concat.xlsx",sheet_name="Sheet2")
pd.concat([ df1,df2],ignore_index=True).drop_duplicates()结果如下:

5.写入Excel数据
当我们读取Excel文件中的表格、整理数据等一系列操作后,需要将处理后的数据导出到本地。事实上,Pandas库中可以导出的数据格式有很多种。我们也以导出xlsx文件为例进行描述。 要将 Pandas 库中的数据导出为 xlsx 格式,请使用 DataFrame 对象的 to_excle() 方法,该方法有四个常用参数。详情如下。- excel_writer:表示数据写入的位置。它可以是路径或 ExcelWriter 对象。
- 工作表名称:设置导出到本地文件的Excel文件的工作表名称。
- index:新导出到本地的文件默认有一个从0开始的索引列,通过设置index=False可以去掉这个索引列。
- 列:选择以指定要导出的列。默认设置是导出所有列。
- 编码:有时导出的文件以不可读的格式显示。此时,需要使用该参数来设置文件编码格式。
df2 = pd.read_excel("concat.xlsx",sheet_name="Sheet2")
df3 = pd.concat ([df1,df2],ignore_index = True)
df3.to_excel(excel_writer =“to_excel.xlsx”,sheet_name =“to_excel”,index =无)
6。使用ExcelWriter
有时,如果需要在同一个工作簿中写入多个Excel表格,则需要使用Pandas中的pd.ExcelWriter()对象。默认情况下,xls 使用 xlwt 引擎,xlsx 默认使用 openpyxl 引擎。 这里有两个参数:一个是路径参数Path,指定生成文件的存储路径,另一个是时间格式参数datetime_format,可以格式化生成文件中的时间列,并根据指定时间。 df1 = pd.read_excel("concat.xlsx",sheet_name="Sheet1")df2 = pd.read_excel("concat.xlsx",sheet_name="Sheet2")
with pd.ExcelWriter( "excel_writer.xlsx",datetime_format="YYYY-MM-DD") 作为作者:
df1.to_excel(excel_writer=writer,sheet_name="df1",index=None)
df2.to_excel(excel_writer=writer ,sheet_name="df2",index=None)上面第三行代码中,在打开一个ExcelWriter对象的同时,我们将时间列中设计的所有数据格式化,并以年-月-日的形式输出。 第四行代码,我们将df1中的数据写入ExcelWriter对象,并将sheet命名为df1。最后第五行代码,将df2中的数据写入ExcelWriter对象,并将工作表命名为df1。
来自快学Python,作者黄巍
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。