百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Pandas学习笔记-了解DataFrame(pandas dataframe map)

liuian 2025-07-27 22:00 20 浏览


前言

本教程使用工具为Anaconda,推荐一本书《Python数据分析-活用pandas库》


学习概要

  • import pandas as pd: 将 pandas包导入并重名为 pd
  • pd.read_excel:读取 excel 文件
  • DataFrame 属性 iloc: 用整数下标取 DataFrame 里的数据
  • DataFrame 属性 loc: 用索引名index + 列名取 DataFrame 里的数据
  • DataFrame 属性 columns: DataFrame对象中的所有列名
  • DataFrame 属性 shape: DataFrame对象中的行数和列数
  • DataFrame 属性 index: DataFrame对象中的所有索引
  • DataFrame 属性 dtypes: DataFrame对象中的所有字段的数据类型
  • DataFrame 方法 head: DataFrame对象中的前5行数据
  • DataFrame 方法 tail: DataFrame对象中的后5行数据
  • DataFrame 方法 groupby: 对DataFrame对象中的数据进行分组

读取 Excel 文件

  • 学习目的: 让大家可以自由地读取本地的 Excel 文件
  • 请用 import 导入 pandas 库, 你这样就可以直接使用 pandas 提供的各种类和函数了
  • import pandas
  • 有时大家觉得 pandas 太长了,也会用
  • import pandas as pd
  • 这样 pandas 导入进来了就有一新名字叫 pd
  • 当前目录下有一个名字叫 gapminder.xlsx的Excel 文件, 把它读到名为 df 的变量中
  • 这里是 gapminder.xlsx 的下载地址
  • 链接: https://pan.baidu.com/s/1dySc4a-rGtcogiMKFkO6Wg 提取码: eh55,
  • 请把这个文件放到和代码同一个目录中
  • read_excel 函数的更详细的用法可以看
  • 资料Link : https://blog.csdn.net/brucewong0516/article/details/79096633
  # 大家记住,这里 pd 和 pandas 是等价的哈
  df = pd.read_excel("gapminder.xlsx")
  • 查看 df 前面5行的数据

备注:

import pandas as pd
df = pd.read_excel("gapminder.xlsx")
df.head()

Out[4]:


country

continent

year

lifeExp

pop

gdpPercap

0

Afghanistan

Asia

1952

28.801

8425333

779.445314

1

Afghanistan

Asia

1957

30.332

9240934

820.853030

2

Afghanistan

Asia

1962

31.997

10267083

853.100710

3

Afghanistan

Asia

1967

34.020

11537966

836.197138

4

Afghanistan

Asia

1972

36.088

13079460

739.981106

检查 DataFrame 的信息

  • 查看 df 的数据类型是什么
  • 查看 df 有多少行,多少列
  • DataFrame 对象有一个名叫的 shape 的属性(属性是没有 "()" 的),它的类型是元组(tuple)
  • shape 的第一个值是行数,第二个值是列数
  • 查看 df 有哪些列名
  • 查看 df 每一列的数据类型
  • 调用 df.info(), 大家可以思考一下 memory usage是什么意思
  • 大家试着把 df 这个变量放到单元格的最后一行,然后执行单元格,看一下输出的表格是否变漂亮了
  • 我还给大家传授一个重要经验,一个单元格最好不要超过 10行代码,这样很好运行调试
print(type(df))
<class 'pandas.core.frame.DataFrame'>
print("df 的大小: ", df.shape)
print("df 的行数: ", df.shape[0])
print("df 的列数: ", df.shape[1])
df 的大小:  (1704, 6)
df 的行数:  1704
df 的列数:  6
 查看 df 有哪些列名
# 第一种查看方式
print(df.columns)
# 第二种查看方式
for col in df.columns:
    print(col)
Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap'], dtype='object')
country
continent
year
lifeExp
pop
gdpPercap
#查看 df 每一列的数据类型
df.dtypes
country       object
continent     object
year           int64
lifeExp      float64
pop            int64
gdpPercap    float64
dtype: object
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1704 entries, 0 to 1703
Data columns (total 6 columns):
 #   Column     Non-Null Count  Dtype  
---  ------     --------------  -----  
 0   country    1704 non-null   object 
 1   continent  1704 non-null   object 
 2   year       1704 non-null   int64  
 3   lifeExp    1704 non-null   float64
 4   pop        1704 non-null   int64  
 5   gdpPercap  1704 non-null   float64
dtypes: float64(2), int64(2), object(2)
memory usage: 80.0+ KB
notebook 会把 DataFrame 以一个很漂亮的格式显示出来df



country

continent

year

lifeExp

pop

gdpPercap

0

Afghanistan

Asia

1952

28.801

8425333

779.445314

1

Afghanistan

Asia

1957

30.332

9240934

820.853030

2

Afghanistan

Asia

1962

31.997

10267083

853.100710

3

Afghanistan

Asia

1967

34.020

11537966

836.197138

4

Afghanistan

Asia

1972

36.088

13079460

739.981106

...

...

...

...

...

...

...

1699

Zimbabwe

Africa

1987

62.351

9216418

706.157306

1700

Zimbabwe

Africa

1992

60.377

10704340

693.420786

1701

Zimbabwe

Africa

1997

46.809

11404948

792.449960

1702

Zimbabwe

Africa

2002

39.989

11926563

672.038623

1703

Zimbabwe

Africa

2007

43.487

12311143

469.709298

1704 rows × 6 columns

DataFrame 常用操作1

  • 获取 df 的前 10行,放到变量 df1 中
  • 提示,可以使用 head 函数,里面有一个数量参数 n
  • 获取 df 的后 20行,放到变量 df2 中
  • 提示,可以使用 tail 函数,里面有一个数量参数 n
df1 =  df.head(n=10)
print(type(df1))
df1
<class 'pandas.core.frame.DataFrame'>


country

continent

year

lifeExp

pop

gdpPercap

0

Afghanistan

Asia

1952

28.801

8425333

779.445314

1

Afghanistan

Asia

1957

30.332

9240934

820.853030

2

Afghanistan

Asia

1962

31.997

10267083

853.100710

3

Afghanistan

Asia

1967

34.020

11537966

836.197138

4

Afghanistan

Asia

1972

36.088

13079460

739.981106

5

Afghanistan

Asia

1977

38.438

14880372

786.113360

6

Afghanistan

Asia

1982

39.854

12881816

978.011439

7

Afghanistan

Asia

1987

40.822

13867957

852.395945

8

Afghanistan

Asia

1992

41.674

16317921

649.341395

9

Afghanistan

Asia

1997

41.763

22227415

635.341351

df2 =  df.tail(n=20)
print(type(df2))
df2
<class 'pandas.core.frame.DataFrame'>


country

continent

year

lifeExp

pop

gdpPercap

1684

Zambia

Africa

1972

50.107

4506497

1773.498265

1685

Zambia

Africa

1977

51.386

5216550

1588.688299

1686

Zambia

Africa

1982

51.821

6100407

1408.678565

1687

Zambia

Africa

1987

50.821

7272406

1213.315116

1688

Zambia

Africa

1992

46.100

8381163

1210.884633

1689

Zambia

Africa

1997

40.238

9417789

1071.353818

1690

Zambia

Africa

2002

39.193

10595811

1071.613938

1691

Zambia

Africa

2007

42.384

11746035

1271.211593

1692

Zimbabwe

Africa

1952

48.451

3080907

406.884115

1693

Zimbabwe

Africa

1957

50.469

3646340

518.764268

1694

Zimbabwe

Africa

1962

52.358

4277736

527.272182

1695

Zimbabwe

Africa

1967

53.995

4995432

569.795071

1696

Zimbabwe

Africa

1972

55.635

5861135

799.362176

1697

Zimbabwe

Africa

1977

57.674

6642107

685.587682

1698

Zimbabwe

Africa

1982

60.363

7636524

788.855041

1699

Zimbabwe

Africa

1987

62.351

9216418

706.157306

1700

Zimbabwe

Africa

1992

60.377

10704340

693.420786

1701

Zimbabwe

Africa

1997

46.809

11404948

792.449960

1702

Zimbabwe

Africa

2002

39.989

11926563

672.038623

1703

Zimbabwe

Africa

2007

43.487

12311143

469.709298

DataFrame 常用操作1


备注:

  • iloc 是 DataFrame 的里一个属性,就像 shape 一样, 然后我们通过 [] 来取数,而不是通过 ()
  • 使用 iloc 操作 DataFrame
  • i 表示 integer(整数), loc 代表 location (位置)
  • iloc 通过整数来标明要操作的数据位置, 类似我们操作列表
a = [1,2,3,4]
a[1]
a[1:3]

题目:

  • 取 df 的第1行,放到 df2 中
  • 取 df 的最后1行,放到 df3 中
  • 取 df 的第一列,放到 df4 中
  • 取 df 的第0,2,3列,放到 df5中
  • 大家做每一道题时,都查看取来的数据的类型, (使用 type 函数),大家想想为什么
#取 df 的第1行,放到 df2 中 
df2 = df.iloc[0,:]
print(type(df2))
df2
<class 'pandas.core.series.Series'>
country      Afghanistan
continent           Asia
year                1957
lifeExp           30.332
pop              9240934
gdpPercap        820.853
Name: 1, dtype: object
# 取 df 的最后1行,放到 df3 中
df3 = df.iloc[-1,:]
print(type(df3))
df3
<class 'pandas.core.series.Series'>
country      Zimbabwe
continent      Africa
year             2007
lifeExp        43.487
pop          12311143
gdpPercap     469.709
Name: 1703, dtype: object
# 取 df 的第一列,放到 df4 中
df4 = df.iloc[:,0]
print(type(df4))
df4
<class 'pandas.core.series.Series'>
0         Asia
1         Asia
2         Asia
3         Asia
4         Asia
         ...  
1699    Africa
1700    Africa
1701    Africa
1702    Africa
1703    Africa
Name: continent, Length: 1704, dtype: object
#取 df 的第0,2,3列,放到 df5中
df5 = df.iloc[:,[0,2,3]]
print(type(df5))
df5
<class 'pandas.core.frame.DataFrame'>


country

year

lifeExp

0

Afghanistan

1952

28.801

1

Afghanistan

1957

30.332

2

Afghanistan

1962

31.997

3

Afghanistan

1967

34.020

4

Afghanistan

1972

36.088

...

...

...

...

1699

Zimbabwe

1987

62.351

1700

Zimbabwe

1992

60.377

1701

Zimbabwe

1997

46.809

1702

Zimbabwe

2002

39.989

1703

Zimbabwe

2007

43.487

1704 rows × 3 columns

DataFrame 重要概念

这是 Pandas里最难的概念部分,如果大家一次学不会也很正常
  • 什么叫索引(index)
  • 故名思意,索引就是用来帮我们找到 DataFrame 里数据的标签
  • DataFrame 默认自带的整数索引
  • DataFrame 各种特列类型索引(以后章节会细讲,本次了解一下就好)
# 访问索引是有一个名叫 index 的属性
df.index
RangeIndex(start=0, stop=1704, step=1)

DataFrame 常用操作2


备注:

  • loc 是 DataFrame 的里一个属性,就像 shape 一样, 然后我们通过 [] 来取数,而不是通过 ()* 使用 loc 操作 DataFrame
  • loc 就是 location 的意思
  • loc 里第一个参数是索引编号(类似于行号),如果索引是什么,就传什么
  • loc 里第二个参数列的名字(iloc传的是列的编号), 一般是字符串

题目:

  • 请一定使用 loc 来操作
  • 取 df 的第1行,放到 df2 中
  • 取 df 的最后1行,放到 df3 中 (注意,loc 不支持 -1 这个操作,大家想想要怎么做)
  • 取 df 的 "country" 列,放到 df4 中
  • 取 df 的 ["year","pop"] 列,放到 df5中
  • 取 df 的前5行,["year","pop"] 列,放到 df6中
  • 大家做每一道题时,都查看取来的数据的类型, (使用 type 函数),大家想想为什么
# 取 df 的第1行,放到 df2 中 
df2 = df.loc[0,:]
print(type(df2))
df2
<class 'pandas.core.series.Series'>
country      Afghanistan
continent           Asia
year                1957
lifeExp           30.332
pop              9240934
gdpPercap        820.853
Name: 1, dtype: object
# 取 df 的最后1行,放到 df3 中
last_row = df.shape[0]-1
df3 = df.loc[last_row,:]
print(type(df3))
df3
<class 'pandas.core.series.Series'>
country      Zimbabwe
continent      Africa
year             2007
lifeExp        43.487
pop          12311143
gdpPercap     469.709
Name: 1703, dtype: object
# 取 df 的 "country" 列,放到 df4 中
df4 = df.loc[:,'country']
print(type(df4))
df4
<class 'pandas.core.series.Series'>
0       Afghanistan
1       Afghanistan
2       Afghanistan
3       Afghanistan
4       Afghanistan
           ...     
1699       Zimbabwe
1700       Zimbabwe
1701       Zimbabwe
1702       Zimbabwe
1703       Zimbabwe
Name: country, Length: 1704, dtype: object
df


country

continent

year

lifeExp

pop

gdpPercap

0

Afghanistan

Asia

1952

28.801

8425333

779.445314

1

Afghanistan

Asia

1957

30.332

9240934

820.853030

2

Afghanistan

Asia

1962

31.997

10267083

853.100710

3

Afghanistan

Asia

1967

34.020

11537966

836.197138

4

Afghanistan

Asia

1972

36.088

13079460

739.981106

...

...

...

...

...

...

...

1699

Zimbabwe

Africa

1987

62.351

9216418

706.157306

1700

Zimbabwe

Africa

1992

60.377

10704340

693.420786

1701

Zimbabwe

Africa

1997

46.809

11404948

792.449960

1702

Zimbabwe

Africa

2002

39.989

11926563

672.038623

1703

Zimbabwe

Africa

2007

43.487

12311143

469.709298

1704 rows × 6 columns

# 取 df 的 ["year","pop"] 列,放到 df5中
df5 = df.loc[:,["year","pop"]]
print(type(df5))
df5
<class 'pandas.core.frame.DataFrame'>


year

pop

0

1952

8425333

1

1957

9240934

2

1962

10267083

3

1967

11537966

4

1972

13079460

...

...

...

1699

1987

9216418

1700

1992

10704340

1701

1997

11404948

1702

2002

11926563

1703

2007

12311143

1704 rows × 2 columns

# 取 df 的前5行,["year","pop"] 列,放到 df6中
top5 = range(5)
df6 = df.loc[top5,['year','pop']]
print(type(df6))
df6
<class 'pandas.core.frame.DataFrame'>


year

pop

0

1952

8425333

1

1957

9240934

2

1962

10267083

3

1967

11537966

4

1972

13079460

分组和聚合计算


备注:

  • 这一部分类似于数据库的 SQL 语言
  • 如果大家学会了,就可开始进入了数据分析师的大门

题目:

  • 按年 'year' 分组(groupby),然后统计人口 'pop' 总数 (sum函数)
  • 按国家 'country' 分组(groupby),然后统计人口 'pop' 总数(sum函数)
  • 按年 'year' 分组(groupby),然后统计预期寿命 'lifeExp' 平均数(mean函数)
#按年 'year' 分组(groupby),然后统计人口 'pop' 总数 (sum函数)
df.groupby(['year'])['pop'].sum()
year
1952    2406957150
1957    2664404580
1962    2899782974
1967    3217478384
1972    3576977158
1977    3930045807
1982    4289436840
1987    4691477418
1992    5110710260
1997    5515204472
2002    5886977579
2007    6251013179
Name: pop, dtype: int64
#按年 'year' 分组(groupby),然后统计预期寿命 'lifeExp' 
平均数(mean函数)
df.groupby(['year'])['lifeExp'].mean()
year
1952    49.057620
1957    51.507401
1962    53.609249
1967    55.678290
1972    57.647386
1977    59.570157
1982    61.533197
1987    63.212613
1992    64.160338
1997    65.014676
2002    65.694923
2007    67.007423
Name: lifeExp, dtype: float64
#按国家 'country' 分组(groupby),然后统计人口 'pop' 总数(sum函数)
df.groupby(['country'])['pop'].sum()
country
Afghanistan           189884585
Albania                30962990
Algeria               238504874
Angola                 87712681
Argentina             343226879
                        ...    
Vietnam               654822851
West Bank and Gaza     22183278
Yemen, Rep.           130118302
Zambia                 76245658
Zimbabwe               91703593
Name: pop, Length: 142, dtype: int64

学习资料Link

  • read_excel 函数的更详细的用法

https://blog.csdn.net/brucewong0516/article/details/79096633

相关推荐

赶紧收藏!编程python基础知识,本文给你全部整理好了

想一起学习编程Python的同学,趁我粉丝少,可以留言、私信领编程资料~Python基础入门既然学习Python,那么至少得了解下这门编程语言,知道Python代码执行过程吧。Python的历...

创建绩效改进计划 (PIP) 的6个步骤

每个经理都必须与未能达到期望的员工抗衡,也许他们的表现下降了,他们被分配了新的任务并且无法处理它们,或者他们处理了自己的任务,但他们的行为对他人造成了破坏。许多公司转向警告系统,然后在这些情况下终止。...

PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子

PI3K/AKT/mTOR(PAM)信号通路是真核细胞中高度保守的信号转导网络,作用于促进细胞存活、生长和细胞周期进程。PAM轴上生长因子向转录因子的信号传导受到与其他多条信号通路的多重交叉相互作用的...

互联网公司要求签PIP,裁员连N+1都没了?

2021年刚画上句号,令无数互联网公司从业者闻风丧胆的绩效公布时间就到了,脉脉上已然炸了锅。阿里3.25、腾讯二星、百度四挡、美团绩效C,虽然名称五花八门,实际上都代表了差绩效。拿到差绩效,非但不能晋...

Python自动化办公应用学习笔记3—— pip工具安装

3.1pip工具安装最常用且最高效的Python第三方库安装方式是采用pip工具安装。pip是Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。pip是Python官方提...

单片机都是相通的_单片机是串行还是并行

作为一个七年的从业者,单片机对于我个人而言它是一种可编程的器件,现在长见到的电子产品中几乎都有单片机的身影,它们是以单片机为核心,根据不同的功能需求,搭建不同的电路,从8位的单片机到32位的单片机,甚...

STM32F0单片机快速入门八 聊聊 Coolie DMA

1.苦力DMA世上本没有路,走的人多了,便成了路。世上本没有DMA,需要搬运的数据多了,便有了DMA。大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中...

放弃51单片机,直接学习STM32开发可能会面临的问题

学习51单片机并非仅仅是为了学习51本身,而是通过它学习一种方法,即如何仅仅依靠Datasheet和例程来学习一种新的芯片。51单片机相对较简单,是这个过程中最容易上手的选择,而AVR单片机则更为复杂...

STM32串口通信基本原理_stm32串口原理图

通信接口背景知识设备之间通信的方式一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。串行通信的分类1、按照数据传送方向,分为:单工:数据传输只支持数据在一个...

单片机的程序有多大?_单片机的程序有多大内存

之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小:我用的单片机芯片是STM32F103C8T6,程序储存器(flash)只有64K。从...

解析STM32单片机定时器编码器模式及其应用场景

本文将对STM32单片机定时器编码器模式进行详细解析,包括介绍不同的编码器模式、各自的优缺点以及相同点和不同点的应用场景。通过阅读本文,读者将对STM32单片机定时器编码器模式有全面的了解。一、引言...

两STM32单片机串口通讯实验_两个32单片机间串口通信

一、实验思路连接两个STM32单片机的串口引脚,单片机A进行发送,单片机B进行接收。单片机B根据接收到单片机A的指令来点亮或熄灭板载LED灯,通过实验现象来验证是否通讯成功。二、实验器材两套STM32...

基于单片机的智能考勤机设计_基于51单片机的指纹考勤机

一、设计背景随着科技水平的不断发展,在这么一个信息化的时代,智能化信息处理已是提高效率、规范管理和客观审查的最有效途径。近几年来,国内很多公司都在加强对企业人员的管理,考勤作为企业的基础管理,是公司...

STM32单片机详细教学(二):STM32系列单片机的介绍

大家好,今天给大家介绍STM32系列单片机,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。前言STM32系列芯片是为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortexM...

STM32单片机的 Hard-Fault 硬件错误问题追踪与分析

有过单片机开发经验的人应该都会遇到过硬件错误(Hard-Fault)的问题,对于这样的问题,有些问题比较容易查找,有些就查找起来很麻烦,甚至可能很久都找不到问题到底是出在哪里。特别是有时候出现一次,后...