dataframe 排序_Pandas_操作数据集合基础 5.1 Pandas的数据结构简介(下):DataFrame类型...

Pandas

作者:PureFFFmennory

上一节:5.1 Pandas的数据结构简介(上):Series类型

PureFFFmennory:Pandas_操作数据集合基础 5.1 Pandas的数据结构简介(上)​zhuanlan.zhihu.com
4d522d681aac48396d002fa85cb6b164.png

注:本节代码开始均默认读者已经导入pandas(import pandas as pd),本系列文章的代码均在在python3.7环境下运行。

5.1 Pandas的数据结构简介(上):DataFrame类型

DataFrame

DataFrame代表一个矩形数据表,并包含一个有序的列集合,每个列可以是不同类型的值(数字,字符串,布尔值等)。DataFrame同时具有行索引和列索引;可以将其视为所有共享相同索引的Series的dict。在后台,数据储存为一个或多个二维块,而不是列表,dict或其他一维数组的集合。DataFrame内部详细信息不在本文章的讨论范围之内。

注:虽然DataFrame在物理上是二维的,但你可以使用它通过分层索引以表格格式表示高维数据,我们将在后面提到,是Pandas中一些关于更高级的数据处理功能的组成部分。

构造DataFrame的方法有很多,尽管最常见的方法之一是用等长列表或NumPy数组的dict。

>> 

像Series一样,结果将自动分配索引于DataFrame,并且按排序顺序放置各列:

输出结果:

>>
    

如果你用的是Jupyter笔记本,则Pandas的DataFrame对象将显示为对浏览器更友好的HTML表格。

对于大型DataFrame,head方法仅选择前5行:

>> 

输出结果:

>>
    

如果你指定列的顺序,则DataFrame的列将按一下的顺序排列:

>> 

输出结果:

>>
    

如果你传递一个dict中未包含的列,那么它将在结果中以缺失值的方式出现:

>> 

输出结果:

>>
        

可以通过类似dict的符号或属性将DataFrame中的列检索为Series:

>> 

输出结果:

>>

注:为方便起见,这里类属性的访问(如frame2.year)和列名的制表符访问均被Python接受。frame2[column]适用于任何列名,但是frame2.column仅在列名有效时才可访问。

这里我们返回的Series与DataFrame具有相同的索引,并且已经正确设置了它们的name属性。

还可以通过具有特殊loc属性的位置或名称来检索行(稍后将对此进行更多介绍):

>> 

输出结果:

>>
year    2002
state   Ohio
pop      3.6
debt     NaN
Name: three, dtype: object

列可以通过分配修改,例如,可以为空的'debt'列分配标量值或数组:

>> 

输出结果:

>>
        

当你将列表或数组分配给列时,该值的长度必须与DataFrame的长度匹配。如果你分配一个Series,则其标签将完全与DataFrame的索引对齐,从而在所有有“孔”的地方插入缺失值:

>> 

输出结果:

>>
        year    state   pop     debt
one     2000     Ohio   1.5      NaN
two     2001     Ohio   1.7     -1.2
three   2002     Ohio   3.6      NaN
four    2001   Nevada   2.4     -1.5
five    2002   Nevada   2.9     -1.7
six     2003   Nevada   3.2      NaN

分配不存在的列将创建一个新列,与dict一样,del关键字将删除列。

作为del的示例,我首先添加一个新的布尔值列,其中state列等于'Ohio':

>> 

输出结果:

>>
        

注:新列的创建不能用frame2.eastern的语法。

然后可以使用del方法删除此列:

>> 

输出结果:

>>

注:从索引DataFrame返回的列是基础数据的view,而不是副本。因此,对Series的任何就地修改都将反映在DataFrame中。该列可以使用Series的copy方法显式的复制。

数据的另一种常见形式是dict的嵌套:

>> 

如果将嵌套的dict传递到DataFrame,那么pandas会将外部dict键解释为列,内部键解释为行:

>> 

输出结果:

>>
        

你可以使用与NumPy数组类似的语法进行转置DataFrame(交换行于列):

>> 

输出结果:

>>
            

dict内部的键被组合并排序以形成结果中的索引。如果指定了显式索引,则情况将并非如此:

>> 

输出结果:

>>
        

Series的dict的处理方式大致相同:

>> 

输出结果:

>>
        

有关可以传递DataFrame构造函数的完整列表如下:

a2094e8112b19231de44300fe8e55cba.png

如果DataFrame的索引和列设置其name属性,则还将显示以下内容:

>> 

输出结果:

>>

与Series一样,values属性以二维ndarry的形式返回DataFrame中包含的数据:

>> 

输出结果:

>>

如果DataFrame的列是不同的dtype,则将选择values数组的dtype来容纳所有列:

>> 

输出结果:

>>

索引对象

pandas的索引(index)对象负责保存轴标签和其他元数据(例如轴名称)。构造Series或DataFrame时使用的任何数组或其他标签序列都在内部转换为Index:

>> 

输出结果:

>>

Index对象是不可变的,因此用户无法对其进行修改:

>> 

不变性使它在数据结构之间共享Index对象更加安全:

>> 

输出结果:

>>

有些用户通常不会利用索引提供的功能,但是由于某些操作会产生包含索引数据的结果,因此了解它们的工作方式非常重要。

除了像数组一样,索引的行为还类似于固定大小的集合:

>> 

输出结果:

>>

与Python集合不同,pandas索引可以包含重复标签:

>> 

输出结果:

>>

具有重复标签的选择将选择所有出现的标签:

每个索引都有许多用于设置逻辑的方法和属性,这些逻辑可以回答有关其包含的数据的其他常见问题,见下表:

1346a1e112844f797391824ba27960e9.png

下一节:Pandas的基本重要功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值