当前位置:   article > 正文

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

pandas读取xls文件吗

一、组件要求

实现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  函数声明

  1. def read_excel(io: {engine, parse},
  2. sheet_name: int = 0,
  3. header: int = 0,
  4. names: Any = None,
  5. index_col: Any = None,
  6. usecols: Any = None,
  7. squeeze: bool = False,
  8. 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,
  9. engine: {__ne__} = None,
  10. converters: Any = None,
  11. true_values: Any = None,
  12. false_values: Any = None,
  13. skiprows: Any = None,
  14. nrows: Any = None,
  15. na_values: Any = None,
  16. keep_default_na: bool = True,
  17. na_filter: bool = True,
  18. verbose: bool = False,
  19. parse_dates: bool = False,
  20. date_parser: Any = None,
  21. thousands: Any = None,
  22. comment: Any = None,
  23. skipfooter: int = 0,
  24. convert_float: Any = None,
  25. mangle_dupe_cols: bool = True,
  26. storage_options: Dict[str, Any] | None = None) -> Any

2.1.2  函数调用

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

  1. import pandas
  2. data = pandas.read_excel('input.xls',...)
  3. # 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文件的路径或绝对路径)。例如:

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

2.2.2  sheet_name

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

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

2.2.3  header

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

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

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

五年一班学生成绩
学号姓名语文数学英语总分
50101张三959898291
50102李四9310096289
50103王五909695281
………………………………

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

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节的表格为例,需要读取学号和各学生语文、数学、英语三科的成绩,则下列语句等价

  1. buff = pd.read_excel('result.xls',header=1,usecols=['学号','语文','数学','英语'])
  2. buff = pd.read_excel('result.xls',header=1,usecols=[0,2,3,4])
  3. 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'的内容是下列没有表头的表格:

50101959898
501029310096
50103909695
……………………

运行下列代码:

  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. buff = pd.read_excel('result.xls',header=None,names=['学号','语文','数学','英语'])
  4. print(buff)

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

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

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

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

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'、……。代码如下:

  1. # -*- coding: utf-8 -*-
  2. import os
  3. import pandas as pd
  4. file_dir="temp" #目录
  5. all_file_list=os.listdir(file_dir)
  6. i = 1
  7. for single_file in all_file_list:
  8. single_data_frame=pd.read_excel(os.path.join(file_dir,single_file)) # 逐个读取
  9. single_data_frame.to_excel(str(i)+'.xls',index=False) #写入
  10. i+=1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/934548
推荐阅读
相关标签
  

闽ICP备14008679号