查看原文
其他

Pandas基本数据类型介绍

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:孙晓玲

文字编辑:钱梦璇

技术总编:张   邯

Pandas是Python中一个强大的第三方库,其为我们提供了高级的数据结构与函数,这些函数和数据结构使得数据分析处理过程高速、有效。Pandas常用的数据结构有两种:Series和DataFrame,接下来将为大家介绍这两种常用的Pandas数据结构。

Series数据结构

Series是Pandas中的一维数据结构(也是一种数组对象),其包含一个数据序列(这一点与NumPy相似)和索引序列,其中索引序列不是必须的,下面来学习一下这种数组对象。

import numpy as npimport pandas as pds = pd.Series([1, 3, 5, 7, 9])s
运行结果如下图所示:

这里使用的是交互式呼叫方式。在创建Series时并没有设置索引序列,从输出结果可见,自动生成了自然数序列索引,这一点与内置有序数据类型相似,索引都是从0开始的。

当需要对Series设置给定索引时,可通过index选项传入指定索引序列。当然,Series对象和其索引都可以设置名称,这由其name属性确定。

s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])s.name='number_series's.index.name='state's

这时,序列索引就成为我们自己设置的字符型索引列表['a', 'b', 'c', 'd', 'e'],并为序列和其索引命名。

这就是Pandas的数组类型与NumPy数组类型的一个不同点,Series中数据与索引值是按位置配对的,类似于字典,顾名思义可以通过传递字典创建一个Series,字典的键成为序列的索引,字典的值成为序列的值。

dict0 = {'a': 1, 'b': 3, 'c': 5, 'd': 7, 'e': 9}s2=pd.Series(dict0)s2

字典型数据在获取数据时是经常遇见的,例如在抓取网页信息时,常见的json文件就是字典型数据。通过将字典转化为Pandas对象可以简化数据清洗过程。当然,Series还可以从NumPy的ndarray数组和标量生成,在这里就不做赘述了。

DataFrame数据结构

通常的数据分析不会是在一维的数据空间进行的,最常用的还是二维的矩阵数据,DataFrame就是矩阵形式的数据表数据结构,DataFrame的每一列都可以是不同的数值类型,这也是其与NumPy数组的一个区别。

Series有索引序列,DataFrame自然也有,有行和列两个索引。NumPy与Pandas经常是一起使用的,接下来我们介绍一种通过传递带有日期时间索引和带标签列的NumPy数组来创建DataFrame的方法。

dates = pd.date_range('20191101', periods=8)dates


用Pandas的date_range函数可以生成指定时期长度的日期序列,这里生成了8期的日期序列。

df = pd.DataFrame(np.random.randn(8, 5), index=dates,columns=list('abcde'))df

生成的二维DataFrame数组如上图所示,这是一个8行5列的二维数组,行索引是生成的dates时间序列,列索引为索引列表['a', 'b', 'c', 'd', 'e'],数据的生成使用了NumPy库的random库的randn函数生成随机数。

这里,我们也可以使用可转化对象的生成DataFrame,例如通过字典生成DataFrame。

df2 = pd.DataFrame({'a': 6., 'b': pd.Timestamp('20191101'), 'c': pd.Series(1, index=list(range(5)), dtype='float32'), 'd': np.array([8] * 5, dtype='int32'), 'e': pd.Categorical(['I', 'love', 'stata', 'and', 'Python']), 'f': 'Stata & Python club'})df2

生成的DataFrame数组如图所示,这里我们可以看到每一列都是不同的数据类型,这也是Pandas与NumPy数组的一个主要区别。

尽管Series和DataFrame是一维、二维数组,我们仍然可以使用分层索引展现高维数据。分层索引是Pandas的一个重要特性,这种特性允许在一个轴上拥有多个(两个及以上)索引层级,为数据分析提供了在更低维度形式中处理高纬度数据的方法。

s3=pd.Series(np.random.randn(8), index=[['one', 'one', 'one', 'two', 'two', 'three', 'three', 'four'], [1, 2, 3, 1, 3, 2, 3, 2]])s3

在这里,可以使用unstack()方法将数据在DataFrame中重新排列,得到一个二维数组。

s3.unstack()

有unstack()方法自然就有stack()方法,stack()方法是unstack()方法的反操作,可以将铺平的数组堆砌。

s3.unstack().stack()

以上就是对Pandas的两种常用的数据结构的介绍,后续将为大家继续介绍Pandas库进行数据处理的相关知识。





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

NumPy数组基本介绍

“个性化”sortobs命令,教你实现排序自由

携手战疫,我们在行动

恭贺新春,平安顺遂|各省疫情关注度地图

过年观影指南(二)

过年观影指南(一)

egenmore隐藏功能——进制转换

相遇insobs,如暗室逢灯

数据可视化之地理坐标系

SFI:Stata与Python的数据交互手册(一)
Stata模拟构建朋友圈
一个粉丝的疑惑—— local和scalar
新的一年,效率满满~(下)

自科基金项目信息爬取

rename group批量修改变量名

小命令,大不同——insobs插入新值

新的一年,效率满满~(上)

圆蛋快乐

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存