Python pandas 操作 excel 详解

文章目录

  • 1 概述
    • 1.1 pandas 和 openpyxl 区别
    • 1.2 Series 和 DataFrame
  • 2 常用操作
    • 2.1 创建 Excel:to_excel()
    • 2.2 读取 Excel:read_excel()
      • 2.2.1 header:标题的行索引
      • 2.2.2 index_col:索引列
      • 2.2.3 dtype:数据类型
      • 2.2.4 skiprows:跳过的行数
      • 2.2.5 usercols:指定列数
      • 2.2.6 head(n)、tail(n):读取前、后 n 行数据
    • 2.3 读写数据
      • 2.3.1 at():获取单元格
      • 2.3.2 loc[]:数据筛选
      • 2.3.3 sort_values():数据排序
  • 3 实战
    • 3.1 遍历 Excel

1 概述

1.1 pandas 和 openpyxl 区别

  • Python 中的 pandas 和 openpyxl 库,均可以处理 excel 文件,其中主要区别:
    • pandas:① 数据操作和分析方面表现优异。它提供了各种文件格式(包括 Excel)中读取数据的函数,在过滤数据、汇总数据、处理缺失值和执行其它数据转换任务方便,特别有用。② 使用方便。DataFrame 对象,使用快速方便,且功能十分强大。
    • openpyxl侧重单元格格式设置。这个库也允许我们直接处理 Excel 文件。pandas 快,但 pandas 做不了的事情,可以让 openpyxl 来做,例如:单元格注释、填充背景色 等等

1.2 Series 和 DataFrame

  • Series:连续。可理解为 “一维数组”,由一行 或 一列 组成,具体是行,还是列,由 DataFrame 指定
  • DataFrame:数据框。可理解为 “二维数组”,由行和列组成
import pandas as pd

# Series 示例
s = pd.Series(['a', 'b', 'c'], index=[1, 2, 3], name='A')
print(s)
# 1    a
# 2    b
# 3    c
# Name: A, dtype: object

# DataFrame 示例
s1 = pd.Series(['a', 'b', 'c'], index=[1, 2, 3], name='A')
s2 = pd.Series(['aa', 'bb', 'cc'], index=[1, 2, 3], name='B')
s3 = pd.Series(['aaa', 'bbb', 'ccc'], index=[1, 2, 3], name='C')
# 方式1:指定 Series 为行
df = pd.DataFrame([s1, s2, s3])
print(df)
#      1    2    3
# A    a    b    c
# B   aa   bb   cc
# C  aaa  bbb  ccc

# 方式2:指定 Series 为列
df = pd.DataFrame({s1.name: s1, s2.name: s2, s3.name: s3})
print(df)
#    A   B    C
# 1  a  aa  aaa
# 2  b  bb  bbb
# 3  c  cc  ccc

2 常用操作

2.1 创建 Excel:to_excel()

import pandas as pd

# 测试数据
data = {'ID': [1, 2, 3], 'Name': ['张三', '李四', '王五']}

# 1.创建 DataFrame 对象
df = pd.DataFrame(data=data)

# 可选操作。将 ID 设为索引,若不设置,会使用默认索引 narray(n)
df = df.set_index('ID')  # 写法1
# df.set_index('ID', inplace=True)  # 写法2

# 2.写入 excel 至指定位置(若文件已存在,则覆盖)
df.to_excel(r'C:\Users\Administrator\Desktop\Temp\1.xlsx')

指定索引前后,效果对比:
在这里插入图片描述

2.2 读取 Excel:read_excel()

import pandas as pd

# 1.读取 excel。默认读取第一个 sheet
student = pd.read_excel(r'C:\Users\Administrator\Desktop\Temp\1.xlsx')

# 2.读取常用属性
print(student.shape)  # 形状(行,列)
print(student.columns)  # 列名

读取指定 sheet:
在这里插入图片描述

import pandas as pd

# 1.读取指定 sheet 的 excel,以下两种方式等同
student = pd.read_excel(r'C:\Users\Administrator\Desktop\Temp\1.xlsx', sheet_name=1)
# student = pd.read_excel(r'C:\Users\Administrator\Desktop\Temp\1.xlsx', sheet_name='Sheet2')

# 2.读取常用属性
print(student.shape)  # 形状(行,列)
print(student.columns)  # 列名

2.2.1 header:标题的行索引

场景1:默认。第一行为标题(行索引为 0,即:header=0)

在这里插入图片描述

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel(默认第 1 行为标题,行索引为 0,即:header=0)
student = pd.read_excel(filePath)
print(student.columns)
# Index(['ID', 'Name', 'Age', 'Grade'], dtype='object')

场景2:指定第 n 行为标题
在这里插入图片描述

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 场景2:excel 中第 2 行才是我们想要的标题(即:header=1)
student = pd.read_excel(filePath, header=1)
print(student.columns)
# Index(['ID', 'Name', 'Age', 'Grade'], dtype='object')

场景3:没有标题,需要人为给定
在这里插入图片描述

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 场景3:excel 中没有标题,需要人为设定
student = pd.read_excel(filePath, header=None)
student.columns = ['ID', 'Name', 'Age', 'Grade']
student.set_index('ID', inplace=True)  # 指定索引列,并替换原数据
student.to_excel(filePath)  # 写入至 Excel
print(student)
#    Name  Age  Grade
# ID                 
# 1    张三   18     90
# 2    李四   20     70
# 3    王五   21     80
# 4    赵六   19     90

2.2.2 index_col:索引列

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 读取 Excel,不指定索引列(会默认新增一个索引列,从 0 开始)
student = pd.read_excel(filePath)
print(student)
#    ID Name  Age  Grade
# 0   1   张三   18     90
# 1   2   李四   20     70
# 2   3   王五   21     80
# 3   4   赵六   19     90


# 读取 Excel,指定索引列
student = pd.read_excel(filePath, index_col='ID')
print(student)
#    Name  Age  Grade
# ID                 
# 1    张三   18     90
# 2    李四   20     70
# 3    王五   21     80
# 4    赵六   19     90

索引相关:

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel,并指定索引列
student = pd.read_excel(filePath, index_col='ID')

2.2.3 dtype:数据类型

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel 并指定 数据类型
student = pd.read_excel(filePath, dtype={'ID': str, 'Name': str, 'Age': int, 'Grade': float})
print(student)
#   ID Name  Age  Grade
# 0  1   张三   18   90.0
# 1  2   李四   20   70.0
# 2  3   王五   21   80.0
# 3  4   赵六   19   90.0

2.2.4 skiprows:跳过的行数

  • 比如:Excel 中有空行,如下图
  • 实际的数据是在第 3 行,所以要跳过前 2 行

在这里插入图片描述

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

student = pd.read_excel(filePath, skiprows=2)
print(student)
#    ID Name  Age  Grade
# 0   1   张三   18     90
# 1   2   李四   20     70
# 2   3   王五   21     80
# 3   4   赵六   19     90

2.2.5 usercols:指定列数

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 读取 Excel B - D 列(均包含)
student = pd.read_excel(filePath, usecols='B:D')
print(student)
#   Name  Age  Grade
# 0   张三   18     90
# 1   李四   20     70
# 2   王五   21     80
# 3   赵六   19     90

在这里插入图片描述

2.2.6 head(n)、tail(n):读取前、后 n 行数据

  • 有时候,excel 数据量很大,读取全部会很耗时,也没必要
  • 咱测试时,仅读取部分行即可
import pandas as pd

# 1.读取 excel
student = pd.read_excel(r'C:\Users\Administrator\Desktop\Temp\1.xlsx')

# 读取前 3 行数据(默认 5 行)
print(student.head(3))

# 读取后 3 行数据(默认 5 行)
print(student.tail(3))

2.3 读写数据

2.3.1 at():获取单元格

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel 并指定 索引
student = pd.read_excel(filePath, index_col=None)

for i in person.index:
    # 读写单元格:ID列,i行 的数据
    student['ID'].at[i] = i + 2

print(student)

2.3.2 loc[]:数据筛选

import pandas as pd


def age_18_to_20(age):
    return 18 <= age <= 20


def grade_good(grade):
    return 90 <= grade <= 100


# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel 并指定 索引
student = pd.read_excel(filePath, index_col='ID')
student = student.loc[student['Age'].apply(age_18_to_20)].loc[student['Grade'].apply(grade_good)]
print(student)

2.3.3 sort_values():数据排序

import pandas as pd

# 文件路径
filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'

# 1.读取 excel 并指定 索引
student = pd.read_excel(filePath, index_col='ID')

# 功能:排序
# by:待排序的字段
# ascending:顺序(True) 还是 逆序(False)
# inplace:是否替换当前对象
# 方式1:排序单个字段
student.sort_values(by='Grade', ascending=False, inplace=True)
print(student)
#    Name  Grade
# ID            
# 1    张三     90
# 4    赵六     90
# 3    王五     80
# 2    李四     70

# 方式2:排序多个字段,如:先顺序排列 Grade, 后逆序排列 ID
student.sort_values(by=['Grade', 'ID'], ascending=[True, False], inplace=True)
print(student)
#    Name  Grade
# ID            
# 2    李四     70
# 3    王五     80
# 4    赵六     90
# 1    张三     90

3 实战

3.1 遍历 Excel

import pandas as pd


def read_excel(excel_name):
    data = pd.read_excel(excel_name)
    for row in data.itertuples():
        # Index:索引, Name:字段名
        print(row.Index, row.Name)


if __name__ == '__main__':
    filePath = r'C:\Users\Administrator\Desktop\Temp\1.xlsx'
    read_excel(filePath)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/273496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ansible 备忘清单(一)

笔者&#xff1a; 把以前的手写笔记电子化吧&#xff0c;顺便当作复习。 基础命令 命令 参数 备注 ansible --version 查看版本号 ansible-doc --help 查看帮助信息 -l &#xff5c;--list 查看所有模块 -s 查看模块摘要 Ansible servers -I &#xff5c;-…

天津医科大学临床医学院专升本公共事业管理专业卫生事业管理考纲

天津医科大学临床医学院高职升本科专业课考试大纲公共事业管理专业《卫生事业管理学》考试大纲 一、考试基本要求 本考试大纲为公共事业管理专业高职升本科入学考试内容&#xff0c;主要考察学生对卫生事业管理学的基本概念、基本理论以及解决问题的基本方法的掌握程度&#…

SpringBoot 2 集成Spark 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Spark 3.* ,如果还未安装相关环境&#xff0c;请参考&#xff1a; Spark 初始 CentOS 7 安装Hadoop 3 单机版 SpringBoot 2 集成Spark 3 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

2024年深度学习、计算机视觉与大模型面试题综述,六大专题数百道题目

DeepLearning-Interview-Awesome-2024 本项目涵盖了大模型(LLMs)专题、计算机视觉与感知算法专题、深度学习基础与框架专题、自动驾驶、智慧医疗等行业垂域专题、手撕项目代码专题、优异开源资源推荐专题共计6大专题模块。我们将持续整理汇总最新的面试题并详细解析这些题目&a…

9. UVM Test

test位于启动环境组件构建的层次顶部(top of the hierarchical)。它还负责测试平台配置和激励生成过程。根据验证计划中提到的设计特征和功能&#xff0c;编写测试。用户定义的测试类源自uvm_test。 9.1 uvm_test class hierarchy 类声明&#xff1a; virtual class uvm_test …

Sublime Text 4 中文汉化教程(Version: Build 4169)

Sublime Text 4汉化 1 知识小课堂1.1 sublim简介1.2 其他编辑器 2 安装过程2.1 安装Install Package Control2.2 Install Package2.3 安装工具包2.4 常用的插件2.5 安装中文包 1 知识小课堂 1.1 sublim简介 Sublime是一款代码编辑器&#xff0c;致力于为开发人员提供快速、高…

玩客云 青龙面板

一、刷机 需要的工具&#xff0c;镊子&#xff0c;双公头USB&#xff08;可以自己做&#xff09;&#xff0c;U盘 青龙面板全教程 | Anubis的小窝 powersee教程 玩客云导航固件使用说明 安装教程 玩客云乱七八糟的坑 静态IP配置 玩客云第二版固件说明 docker 下载器 …

【MySQL】数据库中为什么使用B+树不用B树

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 数 据 库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 B树的特点和应用场景&#xff1a; B树相对于B树的优势&#xff1a; 结论&#xff1a; 结语 我的其他博客 前言 在数据…

GPT-5、开源、更强的ChatGPT!OpenAI公布2024年计划

年终岁尾&#xff0c;正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布&#xff0c;AGI&#xff08;稍晚一些&#xff09;、GPT-5、更好的语音模型、更高的费率限制&#xff1b; 更好的GPTs&#xff1b;更好的推理…

CSS 文字弹跳效果

鼠标移过去 会加快速度 <template><div class"bounce"><p class"text" :style"{animationDuration: animationDuration}">欢迎使用UniApp Vue3&#xff01;</p></div> </template><script> export d…

HTML与CSS

目录 1、HTML简介 2、CSS简介 2.1选择器 2.1.1标签选择器 2.1.2类选择器 2.1.3层级选择器(后代选择器) 2.1.4id选择器 2.1.5组选择器 2.1.6伪类选择器 2.2样式属性 2.2.1布局常用样式属性 2.2.2文本常用样式属性 1、HTML简介 超文本标记语言HTML是一种标记语言&…

小白也能轻松上手的ECharts 配置手册

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4e2; …

【赠书第13期】边缘计算系统设计与实践

文章目录 前言 1 硬件架构设计 2 软件框架设计 3 网络结构设计 4 安全性、可扩展性和性能优化 5 推荐图书 6 粉丝福利 前言 边缘计算是一种新兴的计算模式&#xff0c;它将计算资源推向网络边缘&#xff0c;以更好地满足实时性、低延迟和大规模设备连接的需求。边缘计算…

QML —— 键盘输入示例(附完整源码)

示例效果 Keys 所有视觉基本体都支持通过“附加关键帧”属性进行关键帧处理。按键可以通过onPressed和onReleased信号属性进行处理。 信号属性有一个KeyEvent参数&#xff0c;名为event&#xff0c;其中包含事件的详细信息。如果键被处理&#xff0c;则event.accepted应设置为t…

利用STM32和可控硅控制220V加热电路

利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式&#xff1a;移相触发和过零触发1、过零触发2、移…

ElasticSearch 文档操作

创建文档 PUT /<target>/_doc/<_id> POST /<target>/_doc/ PUT /<target>/_create/<_id> POST /<target>/_create/<_id>删除文档 // 根据 id 删除 DELETE /<index>/_doc/<_id> // 根据查询删除 POST /<target>/…

2023年软件工程师工作总结范文

各位领导&#xff1a; 你们好&#xff01;时光飞逝&#xff0c;光阴似箭&#xff0c;转眼间又到了一年的年末。2023年又是一个不平凡的年&#xff0c;今年是国家十四个五年计划的第三年&#xff0c;是全面贯彻党的二十大精神的开局之年。中国XX集团作为中国XX行业中最大的企…

接口测试及常用接口测试工具(postman/jmeter)附教程

首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把数据库共享给你&#xff0c;他只能给…

通过 conda 安装 的 detectron2

从 detectron2官网 发现预编译的版本最高支持 pytorch1.10、cuda11.3。&#xff08;2023-12-26&#xff09; 1、安装 conda 环境。 conda create --name detectron2 python3.8 2、安装 pytorch1.10 和 cuda11.3。 pip3 install torch1.10.0cu113 torchvision0.11.1cu113 torc…

blender使用faceit绑定自己的表情动作

blender使用faceit绑定自己的表情控制模型 faceit是个神器&#xff0c;来记录一下如何让表情动起来保持相对位置头部分离&#xff0c;方便后续绑定faceitfaceit的注册rig生成地标Animate可以修正表情烘培之前记得保存使用Faceit的整个流程 faceit是个神器&#xff0c;来记录一下…