前言

对于如何使用 R 来处理表格数据,相信你已经学习到很多了。

下面我们的重点是介绍如何在 Python 中处理表格型数据,提到 Python 数据处理,那就不得不说 pandas 了。

pandas 是 Python 数据处理的核心库,提供了快速、灵活、明确的数据结构,能够简单直接地处理结构性和关系型数据。

panda 适用于很多不同类型的数据:

具有不同类型的列的表格数据,如 Excel 和 SQL 表

有序和无序(不一定是固定频率)的时间序列数据

具有行和列标签的任意矩阵数据(同类型或异构数据)

任何其他形式的观察/统计数据集。数据实际上根本不需要标记就可以放置到 pandas 数据结构中

Pandas 主要的数据结构是 Series(一维)与 DataFrame(二维),使用这两种数据结构就足以应对金融、统计、社会科学、工程等领域里的大多数数据了。

相较于 R 语言的 data.frame,DataFrame 提供了更加丰富的功能。

Pandas 是基于 NumPy 开发的,可以与其它第三方科学计算库完美集成。

能够熟练使用 pandas,处理数据将是事半功倍的,它的种种优点就不一一介绍了,下面开始正题吧。

安装

如果你系统中安装的是 Anaconda 环境的话,会自动安装 pandas、numpy、matplotlib 等常用的数据科学相关的库。

如果没有使用 Anaconda 的话可以使用

pip install pandas

一般我是推荐使用 Anaconda 环境的,是真的方便。还不知道如何安装配置 Anaconda 的话,可以找到我前面的文章,里面有详细的讲解。

数据结构

本节,我们先开始介绍 pandas 的基础数据结构

当然啦,使用这个包肯定得先导入了,同时我们也会使用到 numpy 中的一些函数,标准的导入方式是

In [1]: import numpy as np

In [2]: import pandas as pd

1. Series

Series 是带标签的一维数组,可以存储任意数据类型,如整数、浮点数、字符串、Python 对象等类型的数据。轴标签称为索引(index),可以使用 pd.Series 函数来创建

>>> s = pd.Series(data, index=index)

其中,data 可以是

python 字典

多维数组

标量值(如 5)

index 是对应的标签列表。根据不同的数据类型,分为以下几种情况:

多维数组

当 data 是多维数组时,index 长度必须与 data 长度一致。如果没有指定 index 参数,会自动创建递增的数值型索引,即 [0, ..., len(data) - 1]

In [3]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])

In [4]: s

Out[4]:

a 0.469112

b -0.282863

c -1.509059

d -1.135632

e 1.212112

dtype: float64

In [5]: s.index

Out[5]: Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

In [6]: pd.Series(np.random.randn(5))

Out[6]:

0 -0.173215

1 0.119209

2 -1.044236

3 -0.861849

4 -2.104569

dtype: float64

注意:Pandas 的索引值是可以重复,如果使用不支持重复索引的操作会触发异常。

In [7]: pd.Series(np.random.randn(5), index=['a', 'b', 'd', 'd', 'e'])

Out[7]:

a 0.624372

b 0.173827

d 0.078082

d 0.765597

e 0.631827

dtype: float64

字典

可以使用字典实例化 Series:

In [8]: d = {'b': 1, 'a': 0, 'c': 2}

In [9]: pd.Series(d)

Out[9]:

b 1

a 0

c 2

dtype: int64

注意:当 data 为字典,且未设置 index 参数时,如果 Python 的版本 >= 3.6 且 Pandas 的版本 >= 0.23,Series 会按字典的插入顺序对索引排序。

在其他版本中 Series 会按字典的键(key)的字母顺序排序列表。

也就是说,如果我们的 Python < 3.6 或 Pandas < 0.23,上面的结果将是

a 0

b 1

c 2

dtype: int64

如果设置了 index 参数,会将 data 的数据根据 index 的顺序排序显示,不存在的值会复制为 NaN

In [10]: d = {'a': 0., 'b': 1., 'c': 2.}

In [11]: pd.Series(d, index=['b', 'c', 'd', 'a'])

Out[11]:

b 1.0

c 2.0

d NaN

a 0.0

dtype: float64

注意:在 pandas 中使用 NaN(Not a Number)表示缺失值

标量值

如果 data 是标量值,那么必须设置索引值。Series 会按索引的长度重复该标量值。

In [12]: pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])

Out[12]:

a 5.0

b 5.0

c 5.0

d 5.0

e 5.0

dtype: float64

Series 类似 numpy 的 ndarray

Series 的行为与 ndarray 类似,支持大部分的 NumPy 函数,同时还支持索引切片。

In [13]: s[0]

Out[13]: -1.9744628992708957

In [14]: s[:3]

Out[14]:

a -1.974463

b 1.926031

c 0.659861

dtype: float64

In [15]: s[s > s.median()]

Out[15]:

b 1.926031

e 1.077661

dtype: float64

In [16]: s[[4, 3, 1]]

Out[16]:

e 1.077661

d -1.386355

b 1.926031

dtype: float64

In [17]: np.exp(s)

Out[17]:

a 0.138836

b 6.862223

c 1.934524

d 0.249985

e 2.937800

dtype: float64

注意:我们可以使用 s[[4, 3, 1]] 这中传递列表的方式提取指定位置的值,还可以是重复的值,会重复提取

>>> s[[4, 3, 1, 1]]

e 1.077661

d -1.386355

b 1.926031

b 1.926031

dtype: float64

我们可以使用 dtype 属性获取数据的类型

In [18]: s.dtype

Out[18]: dtype('float64')

使用 astype() 设置数据的类型

In [19]: s.astype(str)

Out[19]:

a -1.9744628992708957

b 1.9260314025924432

c 0.6598612596804069

d -1.3863546449807986

e 1.0776610911873974

dtype: object

我们可以将 Series 转换为 array 或 numpy 数组

In [20]: s.array

Out[20]:

[-1.9744628992708957, 1.9260314025924432, 0.6598612596804069,

-1.3863546449807986, 1.0776610911873974]

Length: 5, dtype: float64

In [21]: s.to_numpy()

Out[21]: array([-1.9744629 , 1.9260314 , 0.65986126, -1.38635464, 1.07766109])

Series 也类似字典

Series 类似字典,可以用索引标签提取值或设置对应的值

In [22]: s['b']

Out[22]: 1.9260314025924432

In [23]: s['e'] = 12.

In [24]: s

Out[24]:

a -1.974463

b 1.926031

c 0.600000

d -1.386355

e 12.000000

dtype: float64

In [25]: 'e' in s

Out[25]: True

In [26]: 'f' in s

Out[26]: False

如果想要访问的标签不存在,会引发错误

In [27]: s[f]

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in

----> 1 s[f]

NameError: name 'f' is not defined

也可以使用 get 方法提取 Series 里标签对应的值,当标签不存在时返回 None 或指定其他值

In [28]: s.get('f')

In [29]: s.get('f', np.nan)

Out[29]: nan

Series 支持矢量操作

Series 支持大多数数组操作

In [30]: s + s

Out[30]:

a -3.948926

b 3.852063

c 1.200000

d -2.772709

e 24.000000

dtype: float64

In [31]: s * 2

Out[31]:

a -3.948926

b 3.852063

c 1.200000

d -2.772709

e 24.000000

dtype: float64

Series 之间的操作会自动对齐标签数据,因此,不用顾及执行计算操作的 Series 是否有相同的标签。

In [32]: s[1:] + s[:-1]

Out[32]:

a NaN

b 3.852063

c 1.200000

d -2.772709

e NaN

dtype: float64

无法对应上的标签的运算结果会标记为 NaN,计算结果会是所有涉及到的标签的并集

这样我们就无需编写代码显式对齐数据,为数据分析和研究提供了巨大的自由度和灵活性

注意:默认让不同索引对象操作的结果生成索引并集,是为了避免信息的丢失,当然我们也可以使用 drop 方法删除包含缺失值的标签。

名称属性

Series 支持 name 属性:

In [33]: s = pd.Series(np.random.randn(5), name='something')

In [34]: s

Out[34]:

0 1.926419

1 1.175251

2 -0.568534

3 -0.014069

4 1.401082

Name: something, dtype: float64

In [35]: s.name

Out[35]: 'something'

一般情况下,Series 自动分配 name 属性,特别是从 DataFrame 提取一维数据切片时。

可以使用 rename 方法对 Series 重命名

In [36]: s2 = s.rename("different")

In [37]: s2.name

Out[37]: 'different'

python中pd series_Python 数据处理(三)——pd.Series相关推荐

  1. ML之XGBoost:XGBoost参数调优的优秀外文翻译—《XGBoost中的参数调优完整指南(带python中的代码)》(三)

    ML之XGBoost:XGBoost参数调优的优秀外文翻译-<XGBoost中的参数调优完整指南(带python中的代码)>(三) 目录 3. 参数微调案例/Parameter Tunin ...

  2. Python中非常有用的三个数据科学库

    如果你从事数据科学研究有一段时间了,那么pandas, scikit-learn seaborn和matplotlib这些库你都应该非常的熟悉. 如果您想要扩展您的视野,学习一些更少见但同样有用的库. ...

  3. python中mean的用法_Python Pandas Series.mean()用法及代码示例

    Pandas 系列是带有轴标签的一维ndarray.标签不必是唯一的,但必须是可哈希的类型.该对象同时支持基于整数和基于标签的索引,并提供了许多方法来执行涉及索引的操作. Pandas Series. ...

  4. python编程入门单例_常见的在Python中实现单例模式的三种方法

    单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在 ...

  5. python安装包-在Python中安装包的三种方法

    最近一段时间都在学习 Python3(如果你想部署 Python3 的开发环境,可参考<是时候配置一个Python3的开发环境了>),乘此机会重新回顾了 Python2 的相关知识,在 P ...

  6. python安装-在Python中安装包的三种方法

    最近一段时间都在学习 Python3(如果你想部署 Python3 的开发环境,可参考<是时候配置一个Python3的开发环境了>),乘此机会重新回顾了 Python2 的相关知识,在 P ...

  7. python 三个内置装饰器,python中自带的三个装饰器

    说到装饰器,就不得不说python自带的三个装饰器: 1.@property 将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @propert ...

  8. python中函数参数传递的三种方式_python中函数参数传递的几种方法

    转自  http://www.douban.com/note/13413855/ Python中函数参数的传递是通过"赋值"来传递的.但这条规则只回答了函数参数传递的"战 ...

  9. python中cmd全称_【转】Python中执行cmd的三种方式

    原文链接:http://blog.csdn.net/menglei8625/article/details/7494094 目前我使用到的python中执行cmd的方式有三种: 1. 使用os.sys ...

最新文章

  1. 生物化学与分子生物学分析技术 Analytical Techniques in Biochemistry and Molecular Biology 英文原版
  2. POJ - 2773 Happy 2006(欧几里得+构造)
  3. 连接moogDB数据库
  4. 面试时,面试官到底在考察什么?
  5. 用枚举enum实现单例
  6. 企业微信H5_网页jssdk调用 config和agentconfig的区别
  7. Windows WMIC命令使用详解
  8. 修改Noteexpress插入参考文献序号的颜色
  9. 高级商务办公软件应用【6】
  10. 前言【高等数学教程(单变量微积分)】
  11. 机器学习 | 实战(二)Fashion-MNIST
  12. HTML5 页面布局【结合案例】
  13. 实时交通仿真平台概要
  14. 红蜘蛛 v6.2.1160解除键鼠屏蔽以及实现窗口化
  15. love2d贪吃蛇---画方格
  16. 转torchscript报错:Expected a value of type ‘Tensor (inferred)‘ for argument ‘scale‘ but instead found t
  17. [jzoj5236]【NOIP2017模拟8.7A组】利普希茨
  18. 新旧iPhone齐发力,苹果成最大赢家,中国手机靠小米挽回颜面
  19. java语言基础-刘建-专题视频课程
  20. SIMXXX 在高德地图定位到我的位置

热门文章

  1. 河南漯河警方承认交警代司机交罚款有错-罚款-交警罚款
  2. html5手机网站需要加的那些meta标签,手机网站自适应
  3. c# Create Excel file and save as PDF
  4. 如何根据小米12手机电池信息计算充电时间
  5. 硬盘安装archlinux
  6. 微信小程序--给头像添加logo(生成海报同理)
  7. [顶][转]东北菜大集
  8. 【编译系统】什么是PL/0和类Pcode虚拟机
  9. 百度地图 公交线路查询
  10. 大学python笔记_python笔记(1) 关于我们应不应该继续学习python