美文网首页呆鸟的Python数据分析
《爱上潘大师》系列-你还记得那年的DataFrame吗

《爱上潘大师》系列-你还记得那年的DataFrame吗

作者: 小一不二三 | 来源:发表于2020-03-15 12:40 被阅读0次

2020,努力做一个无可替代的人!


写在前面的话

如果你还记得那年大明湖畔的xiaoyige,那你就应该来看看这篇文章

我们学的是技术,小一我写的可是技术文章,哪来那么多情啊爱啊的

今天的内容很重要的!

先复习一下前面的文章:

可能有的同学不理解复习的意义,我简单说一下:

我写系列文章的时候都会先列好整个系列的大纲,甚至有时候几篇文章是同一天肝出来的。

这就造成有时候这一篇文章的概念会及其依赖上一篇文章,所以呢,花个两三分钟复习一下上一篇,你会更好理解这篇文章。

正文

今天介绍潘大师的另一种数据结构:Dataframe,一个表格型的数据结构。

对于Series 我们只用了一小节介绍,而Dataframe 可能会用三节内容,孰轻孰重应该都清楚吧

学习DataFrame,小一建议你最好和Excel表格联系起来

Excel 表格有行索引、列索引,有数据块,有数据的查找、替换、去重,有数据的透视,汇总,有不同表的数据匹配等等这些。

DataFrame 的初衷就是为了解决这些问题,简洁、易用的功能也是作者最初的愿景

所以 ,后面的系列文章,如果你对某个概念不是很理解,想一想 Excel 中是怎么表述的

创建 DataFrame

先来一个DataFrame 介绍三连

DataFrame 有行(索引)、有列(索引),可以看做是由一个个的Series 组成的字典。

DataFrame 每列可以是不同的值类型(数值、字符串、布尔值)

DataFrame 中的数据是以一个或多个二维块存放的

那DataFrame 都有哪些创建方式?

和NumPy 一样,DataFrame 创建方式也有很多种

常见的有:

  • 通过二维ndarray 创建

  • 通过字典创建

  • 通过列表创建

  • 通过另一个DataFrame 创建

下面简单介绍一下常用的,剩下的同学们自己拓展

通过二维ndarray创建DataFrame

创建一个二维的ndarray 数组,该数组即DataFrame 的数据集

# 通过二维ndarray创建DataFrame
arr_data = np.arange(12).reshape(3, 4)
df_data1 = pd.DataFrame(arr_data)

# 输出
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

结果DataFrame 会自动加上行索引和列索引,和Series 的创建一样

那应该怎么显示声明行、列索引?

也和Series 的创建一样,在创建的时候手动指定就行

# 通过二维ndarray创建DataFrame
columns = ['one', 'two', 'three', 'four']
index = ['a', 'b', 'c']
# 显示指定行、列索引
df_data1 = pd.DataFrame(arr_data, columns=columns, index=index)

# 输出
   one  two  three  four
a    0    1      2     3
b    4    5      6     7
c    8    9     10    11

记住列索引(想要成Excel 的列名):columns

行索引(想象成Excel 的序号):index

默认的行列索引都是从0开始

通过字典创建DataFrame

这里面的字典包括很多,比如:

  • 数组、元祖 、列表 组成的字典
  • 字典组成的字典(嵌套)
  • Series 组成的字典

只要数据是字典格式,就可以做数据集

字典的key作为DataFrame的行索引

# 通过字典创建DataFrame
dict_data = {
    'name': ['xiaoyi', 'xiaosi', 'xiaoqi'],
    'age': [11, 14, 17],
    'score': [95.5, 94.5, 97]
}
df_data2 = pd.DataFrame(dict_data)

# 输出
     name  age  score
0  xiaoyi   11   95.5
1  xiaosi   14   94.5
2  xiaoqi   17   97.0

列索引是字典的 key 值,行索引自动填充

当然字典里面的值数据类型你可以尽情变化,Series、元祖、列表等都是可以的

通过列表创建DataFrame

同样的,这里的列表类型也不止一种:

  • 字典组成的列表
  • Series 组成的列表
# 通过列表创建DataFrame
list_data = [
    {'one': 1, 'two': 2},
    {'one': 1, 'two': 2, 'three': 4}
]
df_data3 = pd.DataFrame(list_data)

# 输出
   one  two  three
0    1    2    NaN
1    1    2    4.0

主要就是这三种创建方式,有些书上写的过于复杂,让人眼花缭乱

万变不离其宗,核心就是这三种

至于第四种通过其他DataFrame创建,就不多说了吧?

经常读我文章的同学要是会了前三种,还不会第四种?

不妨看一下NumPy 的数组创建?顺便反思一下?

索引对象

DataFrame 已经创建好了,但是索引还不太明白,是和Series的一样吗?

能想到Series,说明你差不多都知道是怎么回事了

构建Series 或者DataFrame 时,所用到的任何数据的标签都会被转换成Index对象

Index 对象是不可修改的,这样可以保证多个数据结构之间的安全共享

毕竟人家可是索引,你索引要是都一样了,那到底应该指向谁就说不清了

我们可以使用重新索引的方法 reindex

reindex 的用处相当大,我详细介绍一下参数

reindex(index, method, fille_value, limit, level, copy)

参数 说明
index 用作索引的新序列
method 插值(填充)方式,包括:ffill(前向填充值)、bfill(后向填充值)
fill_value 在重新索引的过程中,需要引入缺失值时使用的替代值
limit 前向或后向填充时的最大填充量

在DataFrame中,存在行、列索引,不同于Series 中只有单一索引。

所以DataFrame中 reindex 可以行、列索引都修改

先看单一索引

# 创建 Series
series_data = pd.Series([1, 2, 4, 5], index=['a', 'b', 'c', 'e'])
# 输出
a    1
b    2
c    4
e    5
dtype: int64

# 重新索引
series_data = series_data.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=-1)
# 输出
a    1
b    2
c    4
d   -1
e    5
dtype: int64

reindex 会根据新索引进行重排,如果某个索引值不存在,则使用 fille_value 的值进行填充

还记得前面说的DataFrame 中行、列索引分别是什么吗?

  • 行索引:index (想象成Excel 中的序号)
  • 列索引:columns (想象成Excel 中的列标签)
df_data2
# 输出
     name  age  score
0  xiaoyi   11   95.5
1  xiaosi   14   94.5
2  xiaoqi   17   97.0

# 行、列重新索引
columns = ['name', 'age', 'score', 'score2']
index = [0, 1, 2, 3]
df_data2 = df_data2.reindex(index=index, columns=columns)
# 输出
     name   age  score  score2
0  xiaoyi  11.0   95.5     NaN
1  xiaosi  14.0   94.5     NaN
2  xiaoqi  17.0   97.0     NaN
3     NaN   NaN    NaN     NaN

对行、列都进行重新索引,索引值不存在的会用空值填充

索引很重要,是Pandas 数据模型的重要部分,但是我们了解上面的内容就够了,也没必要去深究它。

总结一下:

今天主要介绍了DataFrame 的创建和索引的相关操作。

创建方法也是一如既往的多,不过不要慌,真正用起来的时候基本都是从文件中读数据,就一个方法。

索引这一块不要搞混行索引、列索引。

对于索引的一些方法最好是掌握,我写出来的都是常用的,不是常用的我也懒得写,你要是还纠结那就查API 文档细品吧

写在后面的话

每天进步一点点,学习不就是这么来的吗?

写这篇文章的时候,我接到了一个关系很好的朋友的消息。

他的考研成绩公布了,边工作边复习的他,考研历程是我认识的人中最艰难的、最辛苦的。

等他有空,我去取取经,投稿部分应该会有新文章,期待一下

碎碎念一下

上一节碎碎念太多,一下没控制住自己

算算时间,去年十二月份定下的小目标:每周两篇原创文 ,除了春节期间,应该都实现了。

原创不易,欢迎点赞噢

文章首发:公众号【知秋小一】

文章同步:掘金,简书,csdn

原文链接:《爱上潘大师》系列- 你还记得那年的DataFrame 吗

相关文章

  • 《爱上潘大师》系列-你还记得那年的DataFrame吗

    2020,努力做一个无可替代的人! 写在前面的话 如果你还记得那年大明湖畔的xiaoyige,那你就应该来看看这篇...

  • 那一年迷失了谁

    还记得那年的高考吗? 还记得那年高考时的考场吗? 还记得高考时坐的那辆公交车吗? 还记得那年高考时你和谁在一个考场...

  • 错过了就过了

    那年青春,你还记得吗?

  • 《爱上潘大师》系列-与Series的初次相见

    2020,努力做一个无可替代的人! 写在前面的话 如果你是因为标题点进来的,那我得先解释一下 小一我可不是渣男,怎...

  • 考研加油|得到的都是侥幸,失去的才是人生

    你还记得高考那年吗? 你还记得毕业时红了双眼的你们吗? 你还记得你抱着所有的书回家的时刻吗? 你还记得你去母校拿录...

  • 《猩球崛起3》精神永在!

    还记得《猩球崛起1》中Caesar的那句“NO!!!!”吗? 那一刻我爱上了Caesar,爱上了这个系列的电影,这...

  • 匆匆那年

    “还记得你走过的雨后操场吗?”“还记得那年丁香花开的季节吗?”“还记得你打篮球时固执反穿的校服衣吗?”“还记得我一...

  • 漫步青春|驻足

    还记得吗? 还记得吗,六岁那年,迎着春天的风,你追赶着一只纸风筝,无忧无虑地奔跑;还记得吗,七岁那年,屋后大树掩映...

  • 收音机

    还记得那年你送给我的收音机吗?

  • 还好记得

    还记得吗 那年十七岁的你 说你年年都十八岁 还记得吗 那年相爱却没有表明 的我们 你羞涩的说 要我来世记得爱你 还...

网友评论

    本文标题:《爱上潘大师》系列-你还记得那年的DataFrame吗

    本文链接:https://www.haomeiwen.com/subject/cebhehtx.html