我是靠谱客的博主 自由狗,最近开发中收集的这篇文章主要介绍《爱上潘大师》系列-你还记得那年的DataFrame吗,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

作者 | 小一

3b0c0dbb14e659477fddd9ac17e2d767.png

全文共2327字,阅读全文需9分钟

写在前面的话

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

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

今天的内容很重要的!

先复习一下前面的文章:

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

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

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

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


正文

今天介绍潘大师的另一种数据结构: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 文档细品

写在后面的话

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

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

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

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

碎碎念一下

上一节碎碎念太多,一下没控制住自己5cff4a7143faf19c8324521936ed66cb.png

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

加油加油f159001dc063a22a6ee46828e89e967d.png

好巧啊,你也读到这了!    

点个在看让我看到你263ac9f29657ef5767d8220e7bb97058.gif

最后

以上就是自由狗为你收集整理的《爱上潘大师》系列-你还记得那年的DataFrame吗的全部内容,希望文章能够帮你解决《爱上潘大师》系列-你还记得那年的DataFrame吗所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部