pandas的Excel文件读写(一)——组件要求与文件读取

2023-10-26

一、组件要求

实现pandas的Excel文件读写,除了安装pandas外,还需要安装下列组件:

(1)xlrd:从指定的xls格式文件中读取数据

(2)xlwt:写入数据到指定的xls格式文件

(3)openpyxl:支持xlsx格式文件的读写

上述组件在Windows上的常用安装方法是在命令行中输入以下命令:

pip install ****

其中****即代表上述组件(库)的名字xlrd,xlwt,openpyxl。

此外,如果安装了Anaconda等打包了各种扩展库的Python,也可不安装上述库,直接用Anaconda等作为工程文件中所使用的Python环境

二、read_excel()函数

2.1  read_excel()函数声明与调用

2.1.1  函数声明

def read_excel(io: {engine, parse},
               sheet_name: int = 0,
               header: int = 0,
               names: Any = None,
               index_col: Any = None,
               usecols: Any = None,
               squeeze: bool = False,
               dtype: ExtensionDtype | str | dtype | Type[str] | Type[float] | Type[int] | Type[complex] | Type[bool] | Type[object] | Dict[Hashable, ExtensionDtype | str | dtype | Type[str] | Type[float] | Type[int] | Type[complex] | Type[bool] | Type[object]] | None = None,
               engine: {__ne__} = None,
               converters: Any = None,
               true_values: Any = None,
               false_values: Any = None,
               skiprows: Any = None,
               nrows: Any = None,
               na_values: Any = None,
               keep_default_na: bool = True,
               na_filter: bool = True,
               verbose: bool = False,
               parse_dates: bool = False,
               date_parser: Any = None,
               thousands: Any = None,
               comment: Any = None,
               skipfooter: int = 0,
               convert_float: Any = None,
               mangle_dupe_cols: bool = True,
               storage_options: Dict[str, Any] | None = None) -> Any

2.1.2  函数调用

导入pandas库,从pandas库中调用read_excel()函数:

import pandas
data = pandas.read_excel('input.xls',...)
# data为存储读取结果的DataFrame对象变量,input.xls为读取的Excel文件,“...”表示选项

read_excel()函数的返回值为一个DataFrame对象,其结构类似于Excel中的表格形式。

2.2  read_excel函数参数详解

这里只列出一些比较常用的参数的说明。更具体的说明请参阅官方文档:pandas.read_excel — pandas 1.3.2 documentation

2.2.1  io

要读取的Excel文件及所在路径(相对于当前py文件的路径或绝对路径)。例如:

# -*- coding: utf-8 -*-
import pandas as pd
# 为简便起见,以下所有代码段均假定已作出上述声明
buff = pd.read_excel('data/input.xls')
                    # 相对路径,无论Windows还是Linux都建议用正斜杠
buff = pd.read_excel(r'C:\Users\Administrator\Desktop\input.xls')
                    # Windows下的绝对路径,字符串前要加字母r,否则反斜杠会被处理为转义字符

2.2.2  sheet_name

指定要读取的工作表序号(从0开始计算)或者名称,默认为0;None表示读取所有工作表。例如:

buff = pd.read_excel('input.xls')     # 读取第一张表(Excel下的默认名称为'Sheet1')
buff = pd.read_excel('input.xls',sheet_name=2) 
                                      # 读取第三张表
buff = pd.read_excel('input.xls',sheet_name='Sheet3')
                                      # 读取名称为'Sheet3'的工作表
buff = pd.read_excel('input.xls',sheet_name=[0,2,'Sheet4',5])
                                      # 读取第1、3张表,名称为'Sheet3'的工作表和第6张表
buff = pd.read_excel('input.xls',sheet_name=None)
                                      # 读取'input.xls'下的全部工作表

2.2.3  header

指定某一行(从0开始计算,即Excel中显示的行号减1)作为表头,默认为0,即取第一行作为表头。数据为该行以下的数据。

如果工作表中的数据从第一行就开始而没有表头,则应该设定header=None。此时生成的DataFrame会自动将从0开始从左到右计算的列号(即0,1,2,……)作为表头。

例如,文件'result.xls'中的前若干行内容如下:

五年一班学生成绩
学号 姓名 语文 数学 英语 总分
50101 张三 95 98 98 291
50102 李四 93 100 96 289
50103 王五 90 96 95 281
…… …… …… …… …… ……

表格中出现了标题行“五年一班学生成绩”,读取该表格时应去掉标题行从第二行开始,按照下列方式读取:

buff = pd.read_excel('result.xls',header=1)

2.2.4  index_col

指定某一列为索引列。默认为None,表示以从0开始编号的行号(即0,1,2,……)作为虚拟索引。指定索引列后,可以用这一列的具体数据作为行号检索

index_col的值可以是从0开始编号的列号,也可以是具体的列名字符串。

当指定了某一列作为索引列时,这一列会被移动到DataFrame中最左侧的一列

解释器不会检查索引列数据的唯一性,但是为了方便后续操作,建议索引列中的数据应该具有唯一性,即该一列中任何两项数据不能相同。

例如2.2.3节的表格中如需要以学号索引,可设定index_col='学号'。

如果索引列的具体数据是数字,在检索时要以数字格式检索。例如2.2.3节的表格中,在index_col='学号'时,如果要获取学号为50102的学生的语文成绩,应该使用下列语句:

print(buff['语文'][50102])

如果将50102加上引号,会提示无法匹配。

2.2.5  usecols

usecols用来指定读取的列。默认为None,表示读取所有列。有三种形式:

(1)以表头中指定的列名索引,对header=None的无表头表格不适用。例如2.2.3节的表格中,只读取学号和总成绩,则usecols=['学号','总分']。

(2)以数字列表形式的列序号索引,指定从0开始计算的列数,例如usecols=[1,3,5]表示读入第2、4、6列;

(3)以字符串形式的列序号索引,字符串格式为Excel中表示列序号的字母连续的列范围用冒号连接,不连续的列用逗号分隔。例如usecols='B,D,F'表示读入第2、4、6列,usecols='B,D:F'表示读入第2和4~6列。

以2.2.3节的表格为例,需要读取学号和各学生语文、数学、英语三科的成绩,则下列语句等价

buff = pd.read_excel('result.xls',header=1,usecols=['学号','语文','数学','英语'])
buff = pd.read_excel('result.xls',header=1,usecols=[0,2,3,4])
buff = pd.read_excel('result.xls',header=1,usecols='A,C:E')

2.2.6  names

names用于重命名指定的列。如果设定了header = None,则names用于定义列名。

names中的列表元素个数不能多于读入表格的列数(不含索引列)。

如果names中的列表元素个数(设为n)少于读入表格的列数(设为m),则对靠右的n重命名,其余(m-n)列名字为空。

例如文件'result.xls'的内容是下列没有表头的表格:

50101 95 98 98
50102 93 100 96
50103 90 96 95
…… …… …… ……

运行下列代码:

# -*- coding: utf-8 -*-
import pandas as pd

buff = pd.read_excel('result.xls',header=None,names=['学号','语文','数学','英语'])
print(buff)

输出为:(实际输出各列可能不对齐)

    学号  语文  数学  英语
0  50101   95    98   98
1  50102   93   100   96
2  50103   90    96   95
…     ……   ……    ……   ……

如果将names改成['语文','数学','英语'],则输出为:(实际输出各列可能不对齐)

          语文  数学  英语
0  50101   95    98   98
1  50102   93   100   96
2  50103   90    96   95
…     ……   ……    ……   ……

2.2.7  dtype

指定某些列的数据类型。例如dtype={'a':np.float64, 'b':np.int32}表示将名为'a'的一列设为64位浮点类型,将名为'b'的一列设为32位整数类型。

2.2.8  skiprows和skipfooter

skiprows:从第一行开始省略指定行数的数据。如果没有设定header(包括header=None),则skiprows=n与header=n等价。

skipfooter:从工作表有效范围的最后一行开始省略指定行数的数据。工作表的有效范围,是指以第一行第一列为左上角,覆盖所有非空单元格的最小矩形区域(可从Excel中的“分页预览”视图中看到)。

三、读取一个目录下的全部文件

(1)用os.listdir()读取指定目录file_dir下的文件列表。

(2)对文件列表下的每个文件single_file,依次用os.path.join(file_dir,single_file)获取文件名,作为pd.read_excel()的参数,依次进行处理。

目录下的文件应该全部为Excel文件(xls或xlsx格式),否则会报错。

例如,在当前目录内有一个目录temp,里面有若干个xls文件,现需要依次读取里面的所有文件,并分别原样写入文件'1.xls'、'2.xls'、……。代码如下:

# -*- coding: utf-8 -*-
import os
import pandas as pd

file_dir="temp"    #目录
all_file_list=os.listdir(file_dir)
i = 1
for single_file in all_file_list:
    single_data_frame=pd.read_excel(os.path.join(file_dir,single_file)) # 逐个读取
    single_data_frame.to_excel(str(i)+'.xls',index=False)   #写入
    i+=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas的Excel文件读写(一)——组件要求与文件读取 的相关文章

随机推荐

  • 设置CAD显示窗体

    AcDbViewTableRecord view AcGePoint3d max acdbHostApplicationServices gt workingDatabase gt extmax min acdbHostApplicatio
  • 多通道输入的卷积计算

    问题 一直不理解一张彩色3通道的图片 经过一个32层的3 3卷积核后 得到的是32通道的输出 如YOLOv3的第一层卷积层 即输入为416 416 3的feature map 经过3 3 32的filer 输出为416 416 32的fea
  • 疯壳Android嵌入式Linux平板开发教程3-7摄像头

    详情地址 https fengke club GeekMart views offline android 官方QQ群 457586268 摄像头 菜单 摄像头 摄像头在板子左下方
  • windows配置DFS

    文章目录 DFS membe端配置工作任务 1 安装及配置DFS 服务 2 目录设置在H DFSsharedir 3 加入到Server03的DFS服务中 4 配置交错拓扑 5 在H DFSsharedir 文件夹内新建所有部门的文件夹 6
  • 回声消除(AEC)原理、算法及实战——LMS(Least Mean Square)

    回声消除是语音通信前端处理中的一种重要技术 产生的原因是 在实时音视频通话中 扬声器播放的声音有再次录进了麦克风去 在即时通讯应用中 需要进行双方 或是多方的实时语音交流 在要求较高的场合 通常都是采用外置音箱放音 这样必然会产生回音 即一
  • 像考研一样学个宇宙之刷题篇:剑指offerⅡ:整数系列——整数除法0706 TODO

    001 整数除法 给定两个整数 a 和 b 求它们的除法的商 a b 要求不得使用乘号 除号 以及求余符号 一些知识点和思路 第一题 easy题 狠狠来了个下马威 首先是 被除数 除数 关于溢出的情况 可以对除数与被除数分别按照他们的临界值
  • 恒玄BES软件平台学习笔记(5)-I2C

    1 hal iomux set i2c0 配置I2C的Pin脚复用 对应也有hal iomux set i2c1 很多驱动代码没有使用这个API 直接配置了Pin脚 代码看起来不够简洁 2 uint32 t hal i2c open enu
  • gitlab部署及整合Jenkins持续构建(三)nexus私服的安装及实战、linux安装mysql

    文章目录 敏捷持续集成是什么 linux安装jdk和maven 安装jdk 安装maven linux安装nexus3 x nexus私服的使用 编译安装mysql 可能遇到的问题 使用cmake时报错 敏捷持续集成是什么 持续集成是一种软
  • 微信网页如何跟踪调试

    微信从8 0 19开始已经放弃使用X5内核 而使用xweb内核 之前http debugx5 qq com已不可行 新方式如下 1 手机用usb连接至电脑 必须处于usb调试模式 2 在电脑上打开Edge浏览器 地址栏输入如下链接 edge
  • BTC协议

    假如先把去中心化的前提先去掉 我们都信赖一个中心化的机构比如说央行 央行发行货币是由印钞厂那里印钞等等的顺序后才开始发行货币的也就是我们以前最常见的纸币等 而想一下央行要是不发行实物货币了转为发行虚拟货币 央行的公钥我们是都知道的 而我在和
  • 项目时间管理作业

    1 练习题六 1 双代号网络图 2 路径1 A D G J K 长度 2 4 6 1 2 15 路径2 A B E I J K 长度 2 2 2 5 1 2 14 路径3 A B E H K 长度 2 2 2 2 2 10 路径4 A C
  • 原码和补码在计算机中的应用,原码,补码和反码在计算机中的作用

    满意答案 xxyy5566123 2013 06 26 采纳率 58 等级 12 已帮助 13466人 引入原码 反码 和补码的目的就是为了解决减法问题 因为计算机CPU的运算器中只有加法器 要把减法转化成加法来计算 举个例子 A表示十进制
  • 【面试系列】反转链表II

    题意 原题链接 思路 先找到 L R L R L R 由于我们是翻转区间 L R
  • eclipse 下面的folder,source folder,package的区别与作用

    首先明确一点 folder source folder package都是文件夹 既然是文件夹 那么任何的文件都可以往这三种文件夹下面的放 1 他们的区别 folder就是普通的文件夹 它和我们window下面使用的文件夹没有任何区别 so
  • Java 面试知识点合集

    一 基础篇 1 1 java基础 1 面向对象的特征 封装 继承 多态 1 封装 属性能够描述事物的特征 方法能够描述事物的动作 封装就是把同一类事物的共性 包括属性和方法 归到同一类中 方便使用 封装的好处有 隐藏数据及实现细节 对每个属
  • web_servlet总结

    1 Web流程 1 1软件架构 1 C S 客户端 服务器端 cs架构建立在专用的网络上 一般面向相对固定的用户群 它可以对权限进行多层次校验 提供了更安全的存取模式 对信息安全的控制能力很强 2 B S 浏览器 服务器端 bs架构建立在广
  • 服务器千兆网络显示10,win10系统如何查看网卡是千兆还是百兆

    现在的很多新主板配备的都是千兆网络接口 可以更好的满足大宽带用户需求 但是对于win10系统用户来说 并不知道要如何查看网卡是千兆还是百兆 其实方法很简单 现在给大家分享一下win10系统查看网卡是千兆还是百兆的具体解决方法 方法一 1 在
  • 【 ST-LINK\ ST-LINK Utility下载,烧录,批处理操作\命令行】

    必看 必看 必看 下面概述了以下几个烧录软件下载安装 写程器接线 批处理操作内容较多耐心看完 J Falsh 可以称得上目前主流 能烧录目前80 主流芯片 STM32 ST LINK Utility ST系列芯片烧录超方便 ST系列 ST全
  • uview u-input 点击清除按钮,数据清空但视图未清空

    问题描述 点击 uview 的 u input 输入框自带的清除按钮 v model 绑定的数据清空了 但是输入框内还显示着之前的数据 解决方案 将 v model 绑定的值写到 data 初始变量中声明 原始代码
  • pandas的Excel文件读写(一)——组件要求与文件读取

    一 组件要求 实现pandas的Excel文件读写 除了安装pandas外 还需要安装下列组件 1 xlrd 从指定的xls格式文件中读取数据 2 xlwt 写入数据到指定的xls格式文件 3 openpyxl 支持xlsx格式文件的读写