使用pandas操作EXCEL表格入门教程

文章目录

  • 一、前言
  • 二、理解series和DataFrame
    • [2.1 创建Series](#2.1 创建Series)
    • [2.2 读取Series](#2.2 读取Series)
    • [2.3 创建DataFrame](#2.3 创建DataFrame)
    • [2.4 读取DataFrame](#2.4 读取DataFrame)
  • 三、联动EXCEL进行数据读取
    • [3.1 加载EXCEL文件](#3.1 加载EXCEL文件)
    • [3.2 使用pandas进行数据读取](#3.2 使用pandas进行数据读取)
    • [3.3 使用pandas进行条件查询](#3.3 使用pandas进行条件查询)

一、前言

为什么要学习pandas?我们之前其实已经接触了xlwings,它的强项是控制 Excel。比如打开文件、读写单元格、设置字体颜色、操作图表。它不擅长计算,但是如果用 xlwings 逐行遍历 10 万行数据做加法,速度会比蜗牛还慢,同样如果用VBA处理,庞大的数据处理需求,就有点难为二位了

因此 pandas 是"超级加工厂":它的强项是计算和处理数据。它把数据加载到内存(RAM)里,处理 100 万行数据的筛选、求和、匹配,通常只需要 0.x 秒,下面我们主要了解一下它的基础使用用法。

如果需要使用这个包,我们一样使用pip命令进行安装,然后通过import pandas as pd 进行引入,就可以使用了:

shell 复制代码
pip install pandas

二、理解series和DataFrame

2.1 创建Series

Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。

python 复制代码
sr = pd.Series(["a",4,6,"今天",8])
print(sr)
print(sr.index) # 显示索引 RangeIndex(start=0, stop=5, step=1)

注意这里我们没有给sr一个index,因此默认是用数字来表示的,indexpandas的标识符,用于标识每一行的位置,输出的sr结果如下,series 可以代表包含不同的数据类型:

shell 复制代码
0     a
1     4
2     6
3    今天
4     8
dtype: object

那如果我们给定index,得到的结果就是:

python 复制代码
sr = pd.Series(["a",4,6,"今天",8],index=["A","B","C","D","E"])
print(sr)
print(sr.index) # 显示索引 Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
shell 复制代码
A     a
B     4
C     6
D    今天
E     8
dtype: object

我们也可以通过字典的方式生成,如下:

python 复制代码
sort_dictionary = {"A":"a","B":4,"C":6,"D":"今天","E":8}
sr = pd.Series(sort_dictionary)
print(sr) # 字典的键作为索引,值作为具体的第二列的值

2.2 读取Series

Series的读取类似字典的读取方式,如下如果取的是一个值,那么返回的就是一个值的具体类型,比如只通过sr["A"]取值,那么返回的类型是<class 'str'>,而如果取得是多个,则返回的类型还是series

python 复制代码
sort_dictionary = {"A":"a","B":4,"C":6,"D":"今天","E":8}
sr = pd.Series(sort_dictionary)
print(sr["A"]) # 显示索引为A的值
print(type(sr["A"])) # 显示索引为A的值的类型
print("=========") # 分隔线
print(sr[["A","B","C"]]) # 显示索引为A,B,C的值
print(type(sr[["A","B","C"]])) # 显示索引为A,B,C的值的类型

输出为:

shell 复制代码
a
<class 'str'>
=========
A    a
B    4
C    6
dtype: object
<class 'pandas.core.series.Series'>

2.3 创建DataFrame

我们上面提到的Series只是一个一维的,但是DataFrame就将其带入到了二维的场景:

python 复制代码
df = pd.DataFrame({
    "A": [1, 2, 3],
    "B": [4, 5, 6],
    "C": [7, 8, 9]
},index=["a","b","c"])
print(df)

输出为:

shell 复制代码
   A  B  C
a  1  4  7
b  2  5  8
c  3  6  9

其实你可以发现内部就是一个字典,然后我们通过index指定了索引,如果说没有给具体的索引,那么第一列就是0,1,2,我们也可以通过以下命令打印此DataFrame的具体信息:

python 复制代码
print(df.dtypes) # 显示数据类型
print(df.index) # Index(['a', 'b', 'c'], dtype='object')
print(df.columns) # Index(['A', 'B', 'C'], dtype='object')

2.4 读取DataFrame

(1)按列读出

我们通过下面的命令读取上面创建的DataFrame:

python 复制代码
print(df["A"]) # 显示列A
print(type(df["A"])) # 显示列A的类型
print("========") # 分隔线
print(df[["A","B"]]) # 显示列A,B
print(type(df[["A","B"]])) # 显示列A,B的类型

可以看到在控制台输出,可以看出是一列一列取的,如果只是看一列,那类型为Series,如果是两列,就是DataFrame

shell 复制代码
a    1
b    2
c    3
Name: A, dtype: int64
<class 'pandas.core.series.Series'>
========
   A  B
a  1  4
b  2  5
c  3  6
<class 'pandas.core.frame.DataFrame'>

(2)按行读出

那如果需要按行读出呢,我们可以使用loc方法,如下:

python 复制代码
print(df.loc["a"])
print(type(df.loc["a"]))

得到的输出结果如下,可以发现取出的是一维数组,因此类型还是Series

python 复制代码
A    1
B    4
C    7
Name: a, dtype: int64
<class 'pandas.core.series.Series'>

而如果我们同时需要取两行的话,就可以通过列表切片的方式进行索引

python 复制代码
print(df.loc["a":"b"])
print(type(df.loc["a":"b"]))

输出结果如下,可以发现取出的是2行多列,因此是二维数组,数据类型就变成DataFrame了:

shell 复制代码
   A  B  C
a  1  4  7
b  2  5  8
<class 'pandas.core.frame.DataFrame'>

(3)单个数据或区域读出

同时我们也可以实现单个单元格的获取和指定区域的获取:

python 复制代码
print(df.loc["a","A"]) # 显示索引为a,列名为A的值
print("="*20) # 分割线
print(df.loc["a":"b","A"]) # 显示索引为a到b,列名为A的值

输出如下:

shell 复制代码
1
====================
a    1
b    2
Name: A, dtype: int64

三、联动EXCEL进行数据读取

3.1 加载EXCEL文件

比如我们有一个DATA.xlsx 文件,我们首先简单进行读取:

python 复制代码
import pandas as pd

file_path = r"C:\Users\22330\Desktop\进行中\DATA.xlsx"
df = pd.read_excel(file_path) # 读取对应的文件
print(df)
print(df.index) 
print(df.index.is_unique) # True

可以看到,打印出了开始5行和最后的五行,最左侧的一列数字是pandas的标识符,用于标识每一行的位置,在df输出的最后,也告知了数据源的形状,是606行*8列。当然如果看的是csv文件,可以把read_excel()改成read_csv()

有的时候我们只想看数据的前几行数据,就可以使用(只会显示前5行数据

python 复制代码
print(df.head()) # 显示前五行数据

如果我们想要看此表的详细信息,可以通过df.info()得到

python 复制代码
print(df.info()) # 显示数据框的信息,包括列名、非空值数量、数据类型等

可以看到在上面的图中打印出来了DATA.xlsx中每一列的具体信息,是否有空值,数据类型,文件大小等。

如果单纯只是想要看一下数据区域的大小,或者列名,或者数据类型,可以尝试以下命令:

python 复制代码
print(df.shape) # 显示数据行数和列数
print(df.columns) # 显示列名
print(df.dtypes) # 显示数据类型

3.2 使用pandas进行数据读取

可以看到我们的第一列是出库日期,我们可以用出库日期来作为索引,因此可以使用以下方法,将出库日期作为索引列,这样方便我们后期的查询,其中inplace=True表示将"出库日期 "列设置为 DataFrame 的索引,并且 直接修改原始的 df ,而不是返回一个新的:

python 复制代码
df.set_index("出库日期",inplace=True)
print(df.head())

我们打印一下开始的几行,可以看到索引已经变成出库日期了:

现在比如我们想要知道 2023-06-03 出库的货物的 安全等级,就可以这样写:

python 复制代码
print(df.loc["2023-06-03","安全等级"]) # D

或者可以进行多个数据的查询:

python 复制代码
print(df.loc["2023-06-03",["安全等级","产品类别"]]) 
print("="*60) # 分割线
print(df.loc["2023-06-03":"2023-06-05",["安全等级","产品类别"]])

输出结果为:

python 复制代码
安全等级       D
产品类别    家居用品
Name: 2023-06-03 00:00:00, dtype: object
============================================================
           安全等级  产品类别
出库日期
2023-06-03    D  家居用品
2023-06-04    C    服装
2023-06-05    D    食品

或者我们的行和列都可以变成数据区间,例如:

python 复制代码
print(df.loc["2023-06-03":"2023-06-05","产品经理":"地区"])
shell 复制代码
                  产品经理  产品类别  地区
出库日期
2023-06-03   Bob-Smith  家居用品  西北
2023-06-04   Bob-Smith    服装  华北
2023-06-05  Mary-Joson    食品  西北

3.3 使用pandas进行条件查询

比如我们想要查询产品经理为Jerry的所有记录,就可以这样写,下方的 : 代表返回所有列:

python 复制代码
print(df.loc[df["产品经理"]=="Jerry",:])

于是可以看到,输出中返回了筛选之后的结果,注意这里的98行只包括数据源(不包括标题行),因此共98条符合的记录:

也可以把条件写的复杂一些,然后进行多条件的筛选,也可以返回指定的列,如下方的写法:

python 复制代码
# 显示产品经理为Jerry且安全等级为D的所有数据
print(df.loc[(df["产品经理"]=="Jerry")&(df["安全等级"]=="D"),:]) 
# 显示产品经理为Jerry且安全等级为D的销售额和地区
print(df.loc[(df["产品经理"]=="Jerry")&(df["安全等级"]=="D"),["销售额(元)","地区"]])

希望本文的介绍可以帮你打开pandas的大门,后续也会继续分享更多关于pandas数据分析的内容,我是不懂代码的杰瑞学长,我们下期再见!

如果觉得文章对你有帮助,欢迎点赞 + 收藏 + 关注,一起进步!

相关推荐
耶夫斯计3 分钟前
【SQL_agent】基于LLM实现sql助理
数据库·python·sql·语言模型
vibag4 分钟前
RAG向量数据库
python·语言模型·langchain·大模型
kisshuan123965 分钟前
基于YOLO11改进的C3k2-AdditiveBlock实现命中检测与双重命中事件识别_1
python
mg6686 分钟前
0基础开发学习python工具_____用 Python + Pygame 打造绚丽烟花秀 轻松上手体验
开发语言·python·学习·pygame
nervermore99016 分钟前
2.6 测试
python
EZ_Python23 分钟前
告别WPS会员!用Python自制电子发票批量打印排版工具
python·自动化
写文章的大米25 分钟前
1 分钟读懂:Python 装饰器
python
2501_9216494931 分钟前
股指期货 API 入门指南:如何获取实时行情与构建交易系统
python·websocket·金融·区块链·restful
Full Stack Developme1 小时前
Spring Security 与 Apache Shiro 两大安全框架比较
spring boot·python·安全
杰瑞哥哥1 小时前
快速搭建Web前端(streamlit使用指南)
python·信息可视化·web·模型部署