数据分析7 -- 以表格的形式查看和操作数据

在上一篇中,我们学习了如何使用 pandas 的函数来从多种数据源:csv、excel 和 html 网页读取数据。其中不管是哪一种数据读取的方式,最终返回的都是一个 DataFrame 对象。

对于 DataFrame 对象,上一篇我们只是简单将其打印出来,这一篇我们来学习围绕 DataFrame 的基本操作(添加行、列,删除行、列,排序等),除了 DataFrame,我们也会学习另外一个重要的 pandas 数据结构: Series。

我们首先介绍 pandas 中的三个最常见的概念:index、Series 和 DataFrame。

数据的“目录”: index

ndex 也叫索引,索引是计算机科学中非常常见的概念,你可能听起来会有点陌生,但其实应该很早之前就打过交道了。比如看一本书,书的目录就是书本内容的索引。所以通俗意义上,索引可以理解为就是存储了如何访问某块数据方式的数据。拿目录的例子来说,目录本身也是数据,但这个数据的内容是如何访问另一块数据(书的正文)。

在我们之前的学习中,我们也或多或少和索引打过交道。比如我们通过列表的下标访问列表的某个元素,比如 a[5] ,这个 5 也叫列表的索引。字典的场景中,我们通过 key 来访问字典中的某个元素,比如: student["name"],这个 "name" 的字符串,也属于字典的索引。

一维数据序列:Series

Series 本身是一种数据类型,很像我们之前打过交道的列表,是存储多个数据元素的容器。事实上,我们也可以直接使用一个列表来创建一个 Series。但与列表不同的是,Series 一般由两部分组成:index 和 values。

values 容易理解,顾名思义就是存储了 Series 里面的所有元素的值,所以 values 部分可以认为就是和列表是等价的。

index 部分代表代表 Series 的索引。根据上面对于索引的定义,index 部分的数据就是为了能方便地定位到 values 里面的数据。

Series 有一个单独的索引项,这就使得它既支持类似列表一样的数字索引,也支持类似字典一样的用字符串或者其他 Python 对象来做索引。对于 Series,可以简单理解成是一个列表和字典的集合体。

接下来我们用几个实例来简单介绍一下 Series 的概念。

(1)直接从列表创建 Series

import pandas as pd
#通过列表创建series
ser1 = pd.Series([1,3,5,7])
print(ser1)
0    1
1    3
2    5
3    7
dtype: int64

输出有两列,第一列是 index,第二列是 values, values 就是我们传入的列表,而 index 则是对应的序号。当我们只使用列表来创建 Series 对象时,会生成默认的索引。即类似列表那样,每一个元素的位置作为索引。Series 对象也具备 index 和 values 属性,这样我们可以单独访问这两个部分。

print("values: ",ser1.values)
print("index: ",ser1.index)

从以下输出结果可以看到,values 其实就是我们传入的列表,而 index 则是一个 RangeIndex 的对象。

values:  [1 3 5 7]
index:  RangeIndex(start=0, stop=4, step=1)

对于这个 Series 对象,我们可以通过 index 的值来获得对应 values 里面的值。比如 index 等于1 对应的是 values 里面的 3。在代码中想要获得 1 对应的值就可以这样:

print(ser1[1])

输出:

3

(2)创建 Series,并指定索引
在上面的例子中,我们直接从一个列表创建了 Series,Series 为其分配了默认的 index,即元素在列表中的位置作为其对应的 index,比如 5 是列表 1,3,5,7 中的第三个数字,则它的 index 就是 2(从 0 开始数起)。

除了这种方式,Series 还支持我们在创建的时候指定对应的索引。

#使用列表创建series,并指定其索引为另一个列表
ser2 = pd.Series([1,3,5,7],index=["a","b","c","d"])
print(ser2)
a    1
b    3
c    5
d    7
dtype: int64

可以看到,我们指定了一个由 4 个字符串的列表作为数字列表的索引。两个列表的元素是一一对应的关系,比如字符串 "a" 就是数字 1 的索引,字符串 "b" 就是数字 3 的索引。我们可以验证一下。

print(ser2["c"])

输出如下,可以看到我们通过索引 "c" ,确实拿到了数字 5。

5

现在我们来看一下 ser2 的 values 和 index 的值

print("values: ",ser2.values)
print("index: ",ser2.index)
values:  [1 3 5 7]
index:  Index(['a', 'b', 'c', 'd'], dtype='object')

values 和第一个例子一样,但 values 这次就不是 RangeIndex 对象了,而是一个 Index 对象,里面保存了我们传入的作为索引的字符串数组。

总结一下, Series 可以看成是高级的列表或者字典,当不指定 index 的时候,Series 会生成默认的位置索引,这样的 Series 就像是一个列表。而当我们指定了 index 之后,则可以通过 index 列表中的元素来访问对应的 values 中的元素,就像字典的 key-value 结构一样。

整体来说,Series 通过将 index 和 values 分别存储的机制,实现了列表和字典的结合。

二维数据表:DataFrame


学习完了 Series,现在我们来看上一篇经常出现的 DataFrame。在上一篇的学习中,我们都是从各种文件中加载数据,之后直接存储为 DataFrame。这个部分我们来一步步地揭开 DataFrame 的神秘面纱。

(1)DataFrame 的组成
DataFrame 是一个由行和列组成的二维表格。相信你已经猜到了,DataFrame 其实就是由 Series 组成的,DataFram

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值