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

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

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


前言

本教程使用工具为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

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...