当前位置: 首页 > news >正文

python数据分析:使用pandas库读取和编辑Excel表

图片

使用 Pandas,我们可以轻松地读取和写入Excel 文件,之前文章我们介绍了其他多种方法。

使用前确保已经安装pandas和 openpyxl库(默认使用该库处理Excel文件)。没有安装的可以使用pip命令安装:

pip install pandas openpyxl -i https://mirrors.aliyun.com/pypi/simple/

读取excel文件

使用pandas的read_excel函数,读取excel文件,默认返回DataFrame数据格式。

图片

函数参数有很多,主要介绍下常用的参数:

  • io:字符串或文件对象,表示要读取的Excel 文件的路径或文件对象。
  • sheet_name:字符串、整数或字符串列表,表示要读取的工作表名称、工作表索引(从 0 开始)或工作表名称的列表。默认值表示读取第一个工作表。
  • header:用作列名的行号,默认为0(第一行)。如果没有列名,则设为None。也可以指定多行作为多级列名,例如header=[0, 1]。
  • names:列名列表,当header=None时,可以使用此参数自定义列名。index_col:用作索引的列编号或列名。默认为None,使用CSV文件中的行索引作为DataFrame的索引。
  • usecols:返回的列,可以是列名的列表或由列索引组成的列表。用于选择性地读取CSV文件中的某些列。
  • dtype:字典或列表,指定某些列的数据类型。例如,dtype={'column1': int, 'column2': float}。
  • Converters:一个字典,用于对特定列的数据进行转换。键是列名或列索引,值是一个函数,用于将该列的数据进行转换。
  • engine:字符串,用于指定读取Excel文件的引擎。Pandas 默认使用openpyxl读取.xlsx 文件,使用xlrd读取.xls文件。引擎主要有["xlrd", "openpyxl", "odf", "pyxlsb", "calamine"]
  • skiprows:需要忽略的行数(从文件开头算起),或需要跳过的行号列表。
  • nrows:需要读取的行数(从文件开头算起)。用于从大文件中提取部分数据。
  • skipfooter:文件尾部需要忽略的行数。

举例:准备一个excel文件如下:

图片

1)读取文件为DataFrame对象,并打印对象的数据

import pandas as pddf = pd.read_excel("1.xlsx")print(df)

结果:这个结果跟excel表格中的数据结构很类似。

图片

2)读取文件为DataFrame对象,并使用converters参数将name列的数据大写

import pandas as pd#converters参数是一个字典,key为name列,value为lambda函数df = pd.read_excel("1.xlsx",converters={'name':lambda x:x.upper()})
print(df)

结果:

图片

3)读取文件为DataFrame对象,并使用dtype参数将age列返回浮点数,通过nrows参数只读取前2行

import pandas as pddf = pd.read_excel("1.xlsx",dtype={'age':float})
print(df)

结果:

图片

当然这些参数可以组合实现某些特定功能,大家不妨自己尝试下,读取的数据可以继续做数据筛选,清洗、分类聚合等统计分析功能(具体可参考上一篇文章介绍python数据分析:介绍pandas库的数据类型Series和DataFrame)

保存为excel文件

使用DataFrame对象的to_excel函数将DataFrame格式数据保存为excel文件

图片

常用参数介绍:

. excel_writer指定要写入的目标对象,可以是文件路径(字符串)或者是一个 ExcelWriter 对象。

. sheet_name:要写入的工作表名称。默认值是Sheet1。

. na_rep:用于指定缺失值(NaN)的表示方式。默认值是""(空字符串)。

. float_format:用于格式化浮点数。如果需要控制浮点数的显示格式,可以使用这个参数。例如"%.2f"会将浮点数格式化为保留两位小数的形式。

. columns: sequence,:指定要写入的列名列表。如果为 None,则写入所有列。

. index: 默认为 True。表示是否将行(索引)标签写入文件。header: 默认为 True。是否将列名(表头)写入文件。如果为 False,则不写入列名;也可以是一个字符串列表,指定列名的别名。

. startrow:指定从Excel表格的第几行开始写入数据。默认值是 0,表示从第一行开始

. startcol:指定从Excel表格的第几列开始写入数据。默认值是 0,表示从第一列开始。

. engine:用于指定写入 Excel 文件所使用的引擎,和read_excel函数中的engine类似。可以是openpyxl、xlsxwriter等,默认是openpyxl(如果已安装)。

. merge_cells:用于指定是否合并单元格。默认值是False。如果设置为True,并且有重复的列名或行索引等情况,可能会合并单元格。

. encoding:用于指定编码方式。默认值通常是UTF8编码。

1)举例1:读取excel表,然后再保存为excel表

import pandas as pddf = pd.read_excel("example.xlsx",dtype={'age':float},nrows=2)#添加一些参数 不写入索引 不写入表头 从第1行和第2列开始才写入df.to_excel("example1.xlsx",index=False,header=False,startrow=1,startcol=2)

保存后打开如下:

图片

2)举例2:配合使用 ExcelWriter对象将同的DataFrame写入同一个Excel文件的不同工作表

import pandas as pd
data_dict = {'group': ['A', 'C', 'B', 'A', 'A', 'C', 'B', 'B', 'C'],
'name': ['lilei', 'lili', 'wanglei', 'wangning', 'wangling', 'wangming', 'wangyu', 'liyi', 'xiaolei'],
'age': [25, 30, 35,21,23,24,25,26,32],
'city': ['shanghai', 'shenzhen', 'nanjing','shanghai', 'shenzhen', 'nanjing','shanghai', 'shenzhen', 'nanjing']}
df = pd.DataFrame(data_dict)
#将name列写入sheet1,将group列写入sheet2,保存为2.xlsx
with pd.ExcelWriter("2.xlsx") as writer:df1 = df['name']df1.to_excel(writer, sheet_name="Sheet1")df2 =df['group']df2.to_excel(writer, sheet_name="Sheet2")

结果:

图片

图片

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

新的一年祝大家万事如意,财源滚滚!!!!!!

http://www.lryc.cn/news/513872.html

相关文章:

  • 开源轻量级文件分享服务Go File本地Docker部署与远程访问
  • 异步背后的奥秘:事件循环
  • Springboot使用RabbitMQ实现关闭超时订单的一个简单示例
  • 小程序基础 —— 07 创建小程序项目
  • 【Golang 面试题】每日 3 题(十五)
  • Docker命令(用法说明详解)
  • leetcode 热题100(131. 分割回文串)c++
  • vs2022编译opencv 4.10.0
  • Bash 中的 2>1 | tee 命令详解
  • MySQL数据库的日志
  • DataCap 2024.4.1 版本发布:MongoDB 驱动支持、工作流引擎升级
  • 二十三种设计模式-单例模式
  • 【微服务】SpringBoot 国际化适配方案使用详解
  • 太阳能电池板缺陷识别数据集,使用yolo,coco json,pasical voc xml格式标注,可识别旁路二极管,电池故障,热点,2234张原始图片
  • 客户案例:基于慧集通平台集成打通小满CRM+金蝶云星空+钉钉
  • ubuntu 如何使用vrf
  • Debian-linux运维-ssh配置(兼容Jenkins插件的ssh连接公钥类型)
  • K8S详解(5万字详细教程)
  • Redis6为什么引入了多线程?
  • KMP 2024 年总结,Kotlin 崛起的一年
  • leecode188.买卖股票的最佳时机IV
  • 分布式消息队列RocketMQ
  • 诗韵--代码之外的生活:2025 元旦歌
  • SpringBoot项目启动的时候,指定jvm内存大小的3种方式
  • 学习vue3的笔记
  • MySQL UNION
  • day21-ubuntu入门
  • 开发小工具:ping地址
  • 在 Python 中使用 ADX 进行算法交易
  • Unity 3D 从入门到精通:开启游戏开发的奇幻之旅