Python pandas 操作 excel 详解

文章目录

  • 1 概述
    • 1.1 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():数据排序

1 概述

1.1 Series 和 DataFrame

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

扩展:Series 和 DataFrame 两者的底层算法都是 C 语言,所以运算速度快

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 + 2print(student)

2.3.2 loc[]:数据筛选

import pandas as pddef age_18_to_20(age):return 18 <= age <= 20def 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL——表的内外连接

目录 一.内连接 二.外连接 1.左外连接 2.右外连接 一.内连接 表的连接分为内连和外连 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询。 语法&#xff1a; s…

入侵检测(HCIP)

目录 一、渗透流程 二、入侵检测 1、入侵检测原理 2、入侵检测系统结构 3、入侵防御系统 三、恶意代码 1、恶意代码概念&#xff1a; 2、恶意代码命名&#xff1a; 3、恶意代码按传播方式分类&#xff1a; 4、恶意代码按照功能分类&#xff1a; 5、恶意代码传播途径…

uni-app page新建以及page外观配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

ArcGIS高程点生成等高线

基本步骤&#xff1a;数据清洗→创建TIN→TIN转栅格→等值线→平滑线。 1.&#xff08;重要&#xff09;数据清理&#xff1a;删除高程点中的高程异常值数据。 2.创建TIN:系统工具→3D Analyst Tools→数据管理→TIN→创建TIN&#xff08;可直接搜索工具TIN&#xff09;。 单击…

如何进行快照管理

目录 快照管理 手动创建快照 自动创建快照 快照管理 快照管理 传统的物理服务器&#xff0c;为了确保服务器中数据的安全&#xff0c;需要你自行定制备份策略&#xff0c;如果备份到服务器本地&#xff0c;如果存储损坏&#xff0c;备份会同正常数据一起丢失。也就是说需要…

从零构建tomcat环境

一、官网构建 1.1 下载 一般来说对于开源软件都有自己的官方网站&#xff0c;并且会附上使用文档以及一些特性和二次构建的方法&#xff0c;那么我们首先的话需要从官网或者tomcat上下载到我们需要的源码包。下载地址&#xff1a;官网、Github。 这里需要声明一下&#xff…

计算机毕业设计------SSM水果蔬菜商城批发网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,新闻公告管理,果蔬类型管理,城市信息管理,配货点管理,果蔬商品管理,果蔬订单管理,果蔬评价管理…

vivo手机怎样录屏?轻松录制精彩瞬间

“vivo手机怎样录屏呀&#xff1f;买了最新款的vivo手机&#xff0c;感觉功能挺齐全的&#xff0c;最近玩游戏的时候&#xff0c;突然想要录屏&#xff0c;但是怎么都找不到&#xff0c;就想问问大家&#xff0c;vivo手机录屏在哪里呀&#xff1f;” 智能手机已经成为我们生活…

【Java动态代理如何实现】

✅Java动态代理如何实现 ✅JDK动态代理和Cglib动态代理的区别 ✅拓展知识仓✅静态代理和动态代理的区别✅动态代理的用途✅Spring AOP的实现方式&#x1f4d1;JDK 动态代理的代码段&#x1f4d1;Cglib动态代理的代码块 ✅注意事项&#xff1a; 在Java中&#xff0c;实现动态代理…

从git上拉取代码---步骤

1、先进入gitlab地址 2、git clone 地址.git 3、cd 路径 4、git checkout dev 5、git checkout -b 自己的分支 &#xff08;创建自己的分支&#xff09;

Visual Studio2022配置ReSharper C++ 常用设置

如需安装免费的可以在下面留言&#xff0c;看到即回复 文章目录 Visual Studio2022配置ReSharper C 常用设置配置Visual Studio2022&#xff0c;使其能够按回车进行补全配置ReSharper C 设置自动弹出配置ReSharper C 的快捷键ReSharper C 去掉注释拼写使用中文注释 如何关闭新版…

SpringBoot整合jwt(小白入门)

本文项目所用版本为&#xff1a; https://blog.csdn.net/weixin_39570751/article/details/133386557 代码仓库: https://gitee.com/skyblue0678/springboot-demo 目录 什么是JWT JWT依赖 写一个jwt工具类 测试一下jwt 优化&#xff1a;将过期时间配置在文件中 答疑&…

Unitree H1,国内第一台能跑的全尺寸通用人形机器人

原创 | 文 BFT机器人 随着科技的不断发展&#xff0c;机器人技术已经逐渐渗透到各个领域&#xff0c;为人类的生产和生活带来了极大的便利。2023年可以说是通用人形机器人的高光之年&#xff0c;国内外不少机器人和科技团队纷纷发布了人形机器人原型机或产品规划&#xff0c;甚…

外贸中的很多跟想的不一样的事情

说说最近遇到的几个客户情况&#xff0c;以及对一些事情刷新的认知。 第一个客户姑且称为A吧&#xff0c;这个客户在询价的时候&#xff0c;产品的名称以及数量以还有走货的方式写的很清楚&#xff0c;客户A要的产品不是很多&#xff0c; 顶多算是个样品单。 一般情况下&…

PostgreSQL 可观测性最佳实践

简介 软件简述 PostgreSQL 是一种开源的关系型数据库管理系统 (RDBMS)&#xff0c;它提供了许多可观测性选项&#xff0c;以确保数据库的稳定性和可靠性。 可观测性 可观测性&#xff08;Observability&#xff09;是指对数据库状态和操作进行监控和记录&#xff0c;以便在…

Linux操作系统——进程(四)进程切换与命令行参数

进程切换 概念引入 下面我们先了解几个概念&#xff1a; 竞争性: 系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至1个&#xff0c;所以进程之间是具有竞争属性的。为了高效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级 独立性: 多进程…

[论文阅读笔记28] 对比学习在多目标跟踪中的应用

这次做一篇2D多目标跟踪中使用对比学习的一些方法. 对比学习通过以最大化正负样本特征距离, 最小化正样本特征距离的方式来实现半监督或无监督训练. 这可以给训练MOT的外观特征网络提供一些启示. 使用对比学习做MOT的鼻祖应该是QDTrack, 本篇博客对QDTrack及其后续工作做一个总…

Linux OpenEuler(欧拉系统)无公网ip实现SSH远程连接

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

研究生可以直接当教师吗

在教育领域&#xff0c;教师岗位的竞争日益激烈。许多即将毕业的研究生&#xff0c;尤其是教育学专业的&#xff0c;都怀揣着一个共同的疑问&#xff1a;我能不能一出校门就直接当教师&#xff1f; 成为教师并不只是有个学历那么简单。它需要具备扎实的教育学基础、良好的教学技…