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

Pandas基本数据结构之DataFrame简介

liuian 2025-03-11 18:02 41 浏览

DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一,掌握了 DataFrame 的用法,就基本拥有了数据分析的基本能力。DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame也称之为异构数据表,所谓异构指的是不同列的数据类型是可以不同的,可以是字符串、整型或者浮点型等,就好比sql表中每列的数据类型可以不相同一个道理。DataFrame的简单结构如下图所示,其中红色的列表示index,蓝色的行表示columns。

DataFrame创建

Pandas中DataFrame的创建非常简单,语法格式如下:

pd.DataFrame( data, index, columns, dtype, copy)

参数

说明

data

输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。

index

行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。

columns

列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。

dtype

dtype表示每一列的数据类型。

copy

默认为 False,表示是否复制数据 data。

Pandas提供了多种创建DataFrame的方式,主要包含以下几种最基本的方式:

创建空DataFrame

可以使用下列方式直接创建一个空的DataFrame。

#创建一个空的DataFrame
df = pd.DataFrame()
print(df)

结果如下:

Empty DataFrame
Columns: []
Index: []

使用多维列表DataFrame

使用一维列表创建:

#使用1维度列表
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)

结果如下:

   0
0  1
1  2
2  3
3  4
4  5

使用二维列表创建:

#使用2维度列表
data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
print(df)

结果如下:

   id level  rate
0   1     A  3.45
1   2     A  1.68
2   3     E  2.14
3   4     C  3.13
4   5     B  4.33

这里需要注意一点,在使用列表创建时,列表的长度表示行元素的个数,在不指定index和columns的情况下,会默认使用隐式index和columns。

使用Series创建DataFrame

使用Series创建DataFrame时,生成的索引是每个 Series 索引的并集。如果没有指定columns,DataFrame 的columns就是字典键的有序列表。

#使用Series创建DataFrame
data = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)

结果如下:

   one  two
a  1.0  1.0
b  2.0  2.0
c  3.0  3.0
d  NaN  4.0

从Series中指定特定的index

#使用Series创建DataFrame,指定index
data = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d, index = ['d', 'b', 'c'])
print(df)

结果如下:

   one  two
d  NaN  4.0
b  2.0  2.0
c  3.0  3.0

从Series中指定特定的index和columns

#使用Series创建DataFrame,指定index和columns
data = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d, index = ['a', 'b', 'c'], columns=['one','two','three'])
print(df)

结果如下:

   one  two three
a  1.0  1.0   NaN
b  2.0  2.0   NaN
c  3.0  3.0   NaN

这里需要注意的时,在指定index和colunms时,如果在源数据中没有的,会默认使用NaN来填充。

使用字典列表创建DataFrame

一组字典的列表也可以作为输入数据传递给 DataFrame 构造函数。默认情况下,字典的key会被用作columns。

#使用字典列表创建DataFrame
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)

结果如下:

   a   b     c
0  1   2   NaN
1  5  10  20.0

如果在没有指定index的情况下, DataFrame会默认使用隐式索引,因此也可以手动去指定index:

#使用字典列表创建DataFrame,指定index
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df)

结果如下:

        a   b     c
first   1   2   NaN
second  5  10  20.0

使用字典列表创建DataFrame时,还可以通过指定columns来从字典中挑选出指定的key并按找columns中的顺序来创建DataFrame,如果指定的column在key中不存在,则用NaN来补充数据

#使用字典列表创建DataFrame,指定index和columns
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'], columns=['b','a','d'])
print(df)

结果如下:

         b  a   d
first    2  1 NaN
second  10  5 NaN

DataFrame基本属性

名称

基本属性

T

行和列转置

axes

返回一个仅以行索引和列索引的列表。

dtypes

返回每列数据的数据类型

empty

DataFrame中没有数据或者任意坐标轴的长度为0,则返回True

ndim

轴的数量,也指numpy 数组的维数

shape

返回一个元组,表示了 DataFrame 维度

size

DataFrame中的元素数量

values

使用 numpy 数组表示 DataFrame 中的元素值

为了对上述基本属性进行演示,这里我们先创建一个DataFrame:

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
print(df)

结果如下:

   id level  rate
0   1     A  3.45
1   2     A  1.68
2   3     E  2.14
3   4     C  3.13
4   5     B  4.33

T

print(df.T)

结果如下:

          0     1     2     3     4
id        1     2     3     4     5
level     A     A     E     C     B
rate   3.45  1.68  2.14  3.13  4.33

axes

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.axes

结果如下:

[RangeIndex(start=0, stop=5, step=1),
 Index(['id', 'level', 'rate'], dtype='object')]

dtypes

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.dtypes

结果如下:

id         int64
level     object
rate     float64
dtype: object

empty

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.empty

结果如下:

False

如果此时我们重新创建一个空的DataFrame

df = pd.DataFrame()
df.empty

结果如下:

True

ndim

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.ndim

结果如下:

2

shape

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.shape

结果如下:

(5, 3)

size

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.size

结果如下:

15

values

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
df.values

结果如下:

array([[1, 'A', 3.45],
       [2, 'A', 1.68],
       [3, 'E', 2.14],
       [4, 'C', 3.13],
       [5, 'B', 4.33]], dtype=object)

DataFrame操作

DataFrame 可以分别使用列索引(columns)和行索引(index)来完成数据的选取、添加和删除操作。下面依次对这两种类型的操作进行简单介绍。

列索引操作DataFrame

DataFrame 可以使用列索(columns index)引来完成数据的选取、添加和删除操作。

1.列索引选取列数据

data = [[1,'A',3.45],[2,'A',1.68],[3,'E',2.14],[4,'C',3.13],[5,'B',4.33]]
df = pd.DataFrame(data, columns = ['id','level','rate'])
print(df['rate'])

结果如下:

0    3.45
1    1.68
2    2.14
3    3.13
4    4.33
Name: rate, dtype: float64

2.列索引添加列数据

可以利用其他列的数据来生成新的列数据据

df['flag'] = df['rate'] > 2
print(df)

结果如下:

   id level  rate   flag
0   1     A  3.45   True
1   2     A  1.68  False
2   3     E  2.14   True
3   4     C  3.13   True
4   5     B  4.33   True

也可以直接添加新数据列

df['del'] = [1,1,2,2,3]
print(df)

结果如下:

   id level  rate   flag  del
0   1     A  3.45   True    1
1   2     A  1.68  False    1
2   3     E  2.14   True    2
3   4     C  3.13   True    2
4   5     B  4.33   True    3

3.列索引删除列数据

删除列数据的方式有多种,首先可以使用del进行删除:

del df['del']
print(df)

结果如下:

   id level  rate   flag
0   1     A  3.45   True
1   2     A  1.68  False
2   3     E  2.14   True
3   4     C  3.13   True
4   5     B  4.33   True

另外还可以通过pop进行列数据的删除:

df.pop('flag')

结果如下:

0     True
1    False
2     True
3     True
4     True
Name: flag, dtype: bool

这个时候原DataFrame变成了

   id level  rate
0   1     A  3.45
1   2     A  1.68
2   3     E  2.14
3   4     C  3.13
4   5     B  4.33

行索引操作DataFrame

行索引操作和列索引操作类似,也分别包括行索引取数,添加行,删除行等

1.index索引取数

index索引取数时通过将行索引传递给函数loc来实现的

#使用字典列表创建DataFrame,指定index
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
df.loc['first']

结果如下:

a    1.0
b    2.0
c    NaN
Name: first, dtype: float64

2.隐式索引取数

隐式索引为0~range(n)的整数,可以通过方法iloc来对指定行进行取数

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
df.iloc[0]

结果如下:

a    1.0
b    2.0
c    NaN
Name: first, dtype: float64

3.多行索引取数

DataFrame还支持以切片的方式进行多行取数,需要注意的是,中括号内如果不是切片,那么则是按列索引进行取数,这是需要注意的一点

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df[0:2])

结果如下:

        a   b     c
first   1   2   NaN
second  5  10  20.0

另外还可以使用head()方法进行头部n行取数,如果不指定参数,默认取5行。

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df.head(1))

结果如下:

       a  b   c
first  1  2 NaN

另外还可以使用tail()方法进行尾部n行取数,如果不指定参数,默认取5行。

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df.tail(1))

结果如下:

        a   b     c
second  5  10  20.0

4.多行索引取数

DataFrame还支持以切片的方式进行多行取数,需要注意的是,中括号内如果不是切片,那么则是按列索引进行取数,这是需要注意的一点

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df[0:2])

结果如下:

        a   b     c
first   1   2   NaN
second  5  10  20.0

5.添加数据行

与添加列数据不同的是,添加行需要使用cancat()方法进行追加,也可以使用append()方法,但是append已被弃用。

data1 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df1 = pd.DataFrame(data, index=['first', 'second'])
data2 = [{'a': 7, 'b': 3,'c':6}, {'a': 5, 'c': 9}]
df2 = pd.DataFrame(data, index=['third', 'fourth'])
df = pd.concat([df1, df2])
print(df)

结果如下:

        a   b     c
first   1   2   NaN
second  5  10  20.0
third   1   2   NaN
fourth  5  10  20.0

6.行索引删除数据

行索引删除数据使用drop()方法,由于Pandas的行索引是可以允许重复的,因此当有多个index重复时,删除某个index中的行数据会将所有index为改值的行全部删除。

data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20},{'a': 7, 'b': 3,'c':6}, {'a': 5, 'c': 9}]
df = pd.DataFrame(data, index=['first', 'second','third', 'fourth'])
print(df.drop('first'))

结果如下:

        a     b     c
second  5  10.0  20.0
third   7   3.0   6.0
fourth  5   NaN   9.0

关于DataFrame就简单的介绍到这里,由于Pandas是个面向数据分析的工具,因此内部集成了很多数据分析使用到的方法,这些方法作用在Series和DataFrame上来实现特定的数据分析需求,后面如果有时间,会简单介绍几个在数据分析中常用的一些方法。

相关推荐

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

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

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类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...