【Pandas指南】Series

news2024/12/25 0:53:21

Pandas数据结构简介 - Series

来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study

在这里插入图片描述

下面将从对 pandas 中的基本数据结构进行快速、非全面的概述开始以入门。

有关数据类型、索引、轴标记和对齐方式的基本行为适用于所有对象。

文章目录

    • Pandas数据结构简介 - Series
        • 导包
        • 【Series类似ndarray】
        • 【Series是字典般的】
        • 【矢量化操作和标签对齐与系列】
        • 【名称属性】

导包

import numpy as np
import pandas as pd

从根本上说,数据对齐是固有的。除非您明确这样做,否则标签和数据之间的链接不会断开。

【Series】

Series 是一个一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。轴标签统称为索引。

创建Series的基本方法是调用:

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

在这里,data可以是许多不同的东西:

  • 一个python 字典

  • 一个 NDARRAY

  • 标量值(如 5)

传递的索引是轴标签的列表。因此,根据数据的不同,这分为几种情况:

① 从ndarray

如果数据是 ndarray,则索引的长度必须与data相同。如果没有传递索引,将创建一个值为 [0, …, len(data) - 1] 的索引.

s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"])
s
a    0.314088
b    0.104008
c   -0.720088
d    2.083319
e    1.012002
dtype: float64
s.index
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
pd.Series(np.random.randn(5))
0   -0.472511
1    1.090733
2   -1.834285
3    0.140736
4    0.039101
dtype: float64

【注意】pandas 支持非唯一索引值。如果尝试不支持重复索引值的操作,届时将引发异常。

② 从字典

Series可以从字典实例化:

d = {"b": 1, "a": 0, "c": 2}
d
{'b': 1, 'a': 0, 'c': 2}
pd.Series(d)
b    1
a    0
c    2
dtype: int64

如果传递了索引,则会拉出索引中标签对应的数据值。

d = {"a": 0.0, "b": 1.0, "c": 2.0}
d
{'a': 0.0, 'b': 1.0, 'c': 2.0}
pd.Series(d)
a    0.0
b    1.0
c    2.0
dtype: float64
pd.Series(d, index=["b", "c", "d", "a"])
b    1.0
c    2.0
d    NaN
a    0.0
dtype: float64

【注意】NaN(不是数字)是pandas 中使用的标准缺失数据标记。

③ 从标量值

如果data是标量值,则必须提供索引。该值将重复以匹配索引的长度.

pd.Series(5.0, index=["a", "b", "c", "d", "e"])
a    5.0
b    5.0
c    5.0
d    5.0
e    5.0
dtype: float64

【Series类似ndarray】

Series的作用与 ndarray 非常相似,是大多数 NumPy 函数的有效参数。但是,切片等操作也会对索引进行切片。

s
a    0.314088
b    0.104008
c   -0.720088
d    2.083319
e    1.012002
dtype: float64
s[0]
0.3140880811481063
s[:3]
a    0.314088
b    0.104008
c   -0.720088
dtype: float64
s[s > s.median()]
d    2.083319
e    1.012002
dtype: float64
s[[4, 3, 1]]
e    1.012002
d    2.083319
b    0.104008
dtype: float64
np.exp(s)
a    1.369010
b    1.109609
c    0.486709
d    8.031077
e    2.751102
dtype: float64

【注意】我们会在索引部分中解决基于数组的索引,如 s[[4, 3, 1]].

像 NumPy 数组一样,pandas Series只有一个 dtype.

s.dtype
dtype('float64')

这通常是一个 NumPy dtype。但是,pandas 和第三方库在一些地方扩展了 NumPy 的类型系统,在这种情况下,dtype 将是 ExtensionDtype。pandas 中的一些示例是分类数据和可为空的整数数据类型。

如果我们需要支持Series的实际数组,可以使用 Series.array.

s.array
<PandasArray>
[ 0.3140880811481063, 0.10400776543204251, -0.7200878768948227,
  2.0833185892885258,  1.0120015026753872]
Length: 5, dtype: float64

当需要在没有索引的情况下执行某些操作(例如,禁用自动对齐)时,访问数组可能很有用。

Series.array 将始终是一个 ExtensionArray。简而言之,ExtensionArray 是围绕一个或多个具体数组(如 numpy.ndarray)的薄包装器。pandas 知道如何获取 ExtensionArray 并将其存储在 DataFrame 的Series或列中。

虽然 Series 是类似 ndarray 的,但如果我们需要实际的 ndarray,可以使用 Series.to_numpy().

s.to_numpy()
array([ 0.31408808,  0.10400777, -0.72008788,  2.08331859,  1.0120015 ])

即使Series由 ExtensionArray 支持,Series.to_numpy() 也会返回一个 NumPy ndarray。

【Series是字典般的】

Series也类似于固定大小的字典,因为我们可以通过索引标签获取和设置值:

s
a    0.314088
b    0.104008
c   -0.720088
d    2.083319
e    1.012002
dtype: float64
s["a"]
0.3140880811481063
s["e"] = 12.0
s
a     0.314088
b     0.104008
c    -0.720088
d     2.083319
e    12.000000
dtype: float64
"e" in s
True
"f" in s
False

如果索引中不包含标签,则会引发异常:

s["f"]
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

File E:\anaconda\envs\pytorch\lib\site-packages\pandas\core\indexes\base.py:3803, in Index.get_loc(self, key, method, tolerance)
   3802 try:
-> 3803     return self._engine.get_loc(casted_key)
   3804 except KeyError as err:


File E:\anaconda\envs\pytorch\lib\site-packages\pandas\_libs\index.pyx:138, in pandas._libs.index.IndexEngine.get_loc()


File E:\anaconda\envs\pytorch\lib\site-packages\pandas\_libs\index.pyx:165, in pandas._libs.index.IndexEngine.get_loc()


File pandas\_libs\hashtable_class_helper.pxi:5745, in pandas._libs.hashtable.PyObjectHashTable.get_item()


File pandas\_libs\hashtable_class_helper.pxi:5753, in pandas._libs.hashtable.PyObjectHashTable.get_item()


KeyError: 'f'


The above exception was the direct cause of the following exception:


KeyError                                  Traceback (most recent call last)

Cell In[26], line 1
----> 1 s["f"]


File E:\anaconda\envs\pytorch\lib\site-packages\pandas\core\series.py:981, in Series.__getitem__(self, key)
    978     return self._values[key]
    980 elif key_is_scalar:
--> 981     return self._get_value(key)
    983 if is_hashable(key):
    984     # Otherwise index.get_value will raise InvalidIndexError
    985     try:
    986         # For labels that don't resolve as scalars like tuples and frozensets


File E:\anaconda\envs\pytorch\lib\site-packages\pandas\core\series.py:1089, in Series._get_value(self, label, takeable)
   1086     return self._values[label]
   1088 # Similar to Index.get_value, but we do not fall back to positional
-> 1089 loc = self.index.get_loc(label)
   1090 return self.index._get_values_for_loc(self, loc, label)


File E:\anaconda\envs\pytorch\lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key, method, tolerance)
   3803     return self._engine.get_loc(casted_key)
   3804 except KeyError as err:
-> 3805     raise KeyError(key) from err
   3806 except TypeError:
   3807     # If we have a listlike key, _check_indexing_error will raise
   3808     #  InvalidIndexError. Otherwise we fall through and re-raise
   3809     #  the TypeError.
   3810     self._check_indexing_error(key)


KeyError: 'f'

使用 Series.get() 方法,缺少的标签将返回 None 或指定的默认值:

print(s.get("f"))
None
s.get("f", np.nan)
nan

也可以按属性访问这些标签.

【矢量化操作和标签对齐与系列】

使用原始 NumPy 数组时,通常不需要逐个值循环。

在pandas 中使用Series时也是如此。Series也可以传递到大多数 NumPy 方法中,期望一个 ndarray。

s
a     0.314088
b     0.104008
c    -0.720088
d     2.083319
e    12.000000
dtype: float64
s + s
a     0.628176
b     0.208016
c    -1.440176
d     4.166637
e    24.000000
dtype: float64
s * 2
a     0.628176
b     0.208016
c    -1.440176
d     4.166637
e    24.000000
dtype: float64
np.exp(s)
a         1.369010
b         1.109609
c         0.486709
d         8.031077
e    162754.791419
dtype: float64

Series和 ndarray 之间的主要区别在于,Series之间的操作会根据标签自动对齐数据。

因此,我们可以编写计算,而无需考虑所涉及的Series是否具有相同的标签。

s[1:] + s[:-1]
a         NaN
b    0.208016
c   -1.440176
d    4.166637
e         NaN
dtype: float64

未对齐Series之间的操作结果将具有所涉及的索引的并集。

如果在某个系列或另一个Series中找不到标签,则结果将被标记为缺少 NaN。能够在不进行任何显式数据对齐的情况下编写代码,为交互式数据分析和研究提供了巨大的自由度和灵活性。pandas 数据结构的集成数据对齐功能使 pandas 与大多数用于处理标记数据的相关工具区分开来。

【注意】
通常,我们选择使不同索引对象之间的操作的默认结果产生索引的联合,以避免信息丢失。尽管缺少数据,但具有索引标签通常是计算中的重要信息。当然,您可以选择通过dropna功能删除缺少数据的标签。

【名称属性】

Series还具有name属性:

s = pd.Series(np.random.randn(5), name="something")
s
0    0.302426
1    0.924330
2    0.393936
3    0.377490
4   -0.446103
Name: something, dtype: float64
s.name
'something'

在许多情况下,可以自动分配Series名称,特别是从DataFrame中选择单个列时,将为name分配列标签。

我们可以使用pandas 重命名Seriespandas.Series.rename() 方法。

s2 = s.rename("different")
s2.name
'different'

注意,s 和 s2 指的是不同的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git Bash Here和RStudio软件的问题解决

Git Bash Here和RStudio软件的问题解决 文章目录Git Bash Here和RStudio软件的问题解决0、 写在前面1、Git软件在任务栏图标空白2、RStudio软件2.1 警告信息InormalizePath(path.expand(path),winslash,mustWork)2.2 incomplete final line found by readTableHeader on报错3、…

推荐两个go语言的websocket库

最近在写一个需要前后端保持通信的服务。前端要能及时感知后端数据的变化&#xff0c;后端要及时处理前端发过来的指令。这种服务就需要用到websocket了。 以前在写websocket相关的程序时&#xff0c;一直在用gorilla/websocket这个库&#xff0c;这个库事实上已经成为了go语言…

后端面试之系统设计 - 用户密码如何储存在DB里

原文地址&#xff1a;码农在新加坡的个人博客 背景 现在很多网站都因为爆库导致密码泄漏&#xff0c;要设计怎么样的密码储存机制&#xff0c;才能保证最大限度的不被盗取&#xff0c;即使数据泄漏&#xff0c;黑客也无法在短时间内获取对应的密码来登录用户的账号&#xff0c…

LeanCloud: 数据存储实现小程序云开发

1. LeanCloud 官网传送 2. LeanCloud选择原因 微信小程序的开发包括上线需要一个备案过的域名&#xff0c;而域名备案又需要一个服务器&#xff08;仅腾讯云而言&#xff09;。而微信云开发作为个人开发者受限于费用也不做考虑。 此时不考虑复杂的业务逻辑数据库读取是后端服…

A股、港股上市公司碳排放、碳强度和碳披露数据(2018-2021年)

随着中国碳强度减排任务的不断加重&#xff0c;当前政策的就业红利将不复存在&#xff0c;同时政策机制蕴含的资源错配、各行业边际减排成本不相等的问题则愈加严重&#xff0c;实施碳交易减排政策的时机逐渐成熟&#xff0c;政府应如何根据二氧化碳排放量、碳强度和碳披露等数…

带你走进Java字符串的小世界

目录 一. String 1. 什么是String 2. String常用构造器 3. 字符串的判断 4. 字符串的获取 5. 字符串的转换 6. 字符串比较和替换 7. 字符串的切割 二. StringBuffer与StringBuilder 2.1 关于StringBuffer 2.1.1 定义 2.1.2 构造方法 2.2 关于StringBuffer 三. StringJoiner的使…

分布式缓存的四大痛点

目前开发中经常用到的缓存&#xff0c;是我们必不可缺的&#xff0c;他大大的提高了我们整个项目的响应速度和并发量。但是带来好处的同时&#xff0c;也给我们带了了新的问题&#xff1a;缓存穿透、缓存击穿、缓存雪崩以及缓存一致性这么四个问题&#xff0c;也是分布式缓存的…

LeetCode算法之----动态规划

点赞收藏&#xff0c;以防遗忘 本文【程序大视界】已收录&#xff0c;关注免费领取互联网大厂学习资料&#xff0c;添加博主好友进群学习交流&#xff0c;欢迎留言和评论&#xff0c;一起交流共同进步。 目录 【一】前言 【二】打家劫舍 【三】不同路径 【四】最小路径和 …

【数据预处理】基于Kettle的字符串数据清洗、Kettle的字段清洗、Kettle的使用参照表集成数据

文章目录一.前言1.1 实验内容二.实验过程2.1 实验内容一&#xff1a;掌握基于Kettle的字符串数据清洗2.2 实验内容二&#xff1a;掌握基于Kettle的字段清洗2.3 实验内容三&#xff1a;掌握基于Kettle的使用参照表集成数据2.4 实验心得&#xff1a;一.前言 需要本文章的源文件下…

用零知识证明连接多链宇宙

目录 一、前言 二、Bridges和Zero Knowledge Proofs 三、Succinct Verification of Proof of Consensus (Succinct Labs)

【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里?

相关博客 【自然语言处理】【ChatGPT系列】ChatGPT的智能来自哪里&#xff1f; 【自然语言处理】【ChatGPT系列】Chain of Thought&#xff1a;从大模型中引导出推理能力 【自然语言处理】【ChatGPT系列】InstructGPT&#xff1a;遵循人类反馈指令来训练语言模型 【自然语言处理…

二叉搜索树与Mysql索引的亲密关系

欢迎关注公众号&#xff1a;【离心计划】&#xff0c;一起逃离技术舒适圈 二叉搜索树 二叉搜索树大家应该多多少少听过&#xff0c;它有一个很重要的特征&#xff0c;就是父节点左子树所有结点的值小于父节点的值&#xff0c;右子树所有结点的值大于父节点的值&#xff0c;这个…

详解vue中vuex的用法

前言 说到 vuex 相信大家都不陌生&#xff0c;vuex 是一个专为 vue.js 应用程序开发的状态管理模式。vuex 背后的基本思想&#xff0c;就是单向数据流。今天我们就来好好聊聊 vuex。 vuex&#xff1f; 用官方的话来说&#xff0c;vuex 是一个专为 vue.js 应用程序开发的状态管…

【Linux】进程间通信之共享内存与信号量初识

目录&#x1f308;前言&#x1f338;1、System V共享内存&#x1f361;1.1、概念&#x1f362;1.2、原理&#x1f33a;2、共享内存相关函数和指令&#x1f361;2.1、shmget函数&#xff08;创建&#xff09;&#x1f362;2.2、shmctl函数&#xff08;控制&#xff09;&#x1f…

使用 DataAnnotations(数据注解)实现模型的通用数据校验

DataAnnotations 实现数据模型的通用校验参数校验的意义常用参数的校验.NET 中内置 DataAnnotations 提供的特性校验关于 DataAnnotations 中的特性介绍基于 DataAnnotations 的通用模型校验封装基于 DataAnnotations 的特性校验助手实现步骤如何使用 DataAnnotations 封装的特…

某农业学校 算法设计与分析-第五次实验-回溯算法

1. 罗密欧与朱丽叶的迷宫问题 问题描述 罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个mn的迷宫中&#xff0c;如图所示。每一个方格表示迷宫中的一个房间。这mn个房间中有一些房间是封闭的&#xff0c;不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗…

第二章:关系数据库

一、关系数据库结构及形式化定义 1、【单选题】 下图中&#xff0c;关系D1、D2、D3笛卡尔积的目和基数分别为 正确答案&#xff1a; B 2、【多选题】下图中能够作为候选码的属性组为 正确答案&#xff1a; ABD 3、【多选题】关于关系数据库&#xff0c;说法正确的是 正确答…

二、栈和队列

二、栈和队列 栈——后进先出 应用&#xff1a;数制转换、括号匹配、行编辑程序、迷宫求解、表达式求值、八皇后问题、函数调用、递归调用的实现 队列——先进先出 应用&#xff1a;脱机打印输出 多用户系统用户排队分时循环使用CPU和主存 按用户优先级排队&#xff0c;每…

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’一、问题描述二、原因分析三、升级gcc版本四、验证一、问题描述 在一个新的Redhat7.6 linux虚拟机上&#xff0c;将gtest clone下来之后编译&#xff0c;一堆报错&#xff1a; /opt/googletest/…

多线程问题(二)(安全问题)

目录 一、多线程不安全引例 二、线程不安全的原因 1、线程是抢占式执行 2、多线程共享同一变量 3、对变量的操作不是原子性 4、内存可见性 5、指令重排序 三、线程不安全问题的解决方案 1、使用synchronized关键字进行加锁 a、 synchronized修饰普通方法 b、sy…