news 2026/9/14 21:28:33

搞半天Python数据分析,原来numpy.array才是Pandas这尊大神的祖宗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
搞半天Python数据分析,原来numpy.array才是Pandas这尊大神的祖宗

是针对借助 NumPy 而产生的一种工具载体范畴, 此工具载体范畴是因致力于解决数据分析任务从而被创建的。它收纳了大量的库以及一些标准的数据模型, 为高效操作大型数据集提供了所需工具。它还搭建起大量能助力我们迅捷便利处理数据的函数以及方法。简洁来讲, 你能够将其视作是 Excel 版本类别的一种呈现示意。

官网 可以供查阅API和更多教程

具有以下数据结构:

有这样一种数组, 它是一维的, 跟Numpy里的一维array类似, 和基本的数据结构List也十分相近, 现在它能够保存不同种类的数据类型, 像字符串、值、数字等都可以在其中保存。

Time- :以时间为索引的。

二维的那种表格样式的数据结构, 好多功能跟R里的data.frame相似, 能够被理解成所是的容器。

用于某些特定表现形式的三维数组的Panel, 在最近的版本当中, 已经被弃用了这个数据结构, 因此, 这里就不对此进行介绍了, 它可以被当成一种特定类型的容器。

我们本文就来一起总结学习常用数据结构和操作

1 数据结构以及操作——

是一种一维数组, 它和NumPy里的数组极为相似, 对, 事实上, 它基本上就是基于NumPy的数组对象得以形成的, 然而其与NumPy的数组存在差异, 它能够存放各类不同类型的对象, 它能为数据自行定义标签, 也就是索引(index), 并且再通过索引去访问数组当中的数据。

导入模块:

import numpy as np import pandas as pd

创建一个 的基本语法如下:

s = pd.Series(data,index)

参数

意义

dadt

字典、或标量值 (标量就是只有大小,没有方向的量)

index

对于data, 有着类似字典key那般的索引值, index参数是能够省略掉的, 你是可以选择不输入这个参数。要是不带index参数滴话, 就会自动运用默认index去进行索引, 比如说数组, 其索引值是。

0, …, len(data) - 1

建分为以下4种情况:

从 list创建

从numpy 创建

从 dict创建

在data属于dict类型, 并且没有进行索引传递的情形下, 要是运用版本大于等于3点6以及版本大于等于0点23, 那么索引将会依据dict的插入顺序予以排序。就如同下面所呈现的图示:

于上面那幅图里, 要是您所用版本低于3.6, 抑或是版本低于0.23, 那么将会依据词条键的词法顺序(也就是)。

‘a’, ‘b’, ‘c’

而不是

‘b’, ‘a’, ‘c’

).

留意, NaN亦说是并非数字, 乃是所运用的规范缺失数据标记, 依标量去创建。

倘若数据属于标量值, 那么就得提供索引, 会重复该值用以匹配索引的长度。

从 里获取数据:

访问 里的数据的方式,和 字典基本一样:

对 进行算术运算操作

基于index来开展进行的, 我们能够运用加入减去乘以除以(+ - * /)这般类型的运算符针对两个予以开展运算, 将会按照索引index, 针对作出响应的数据开展计算, 结果届时将会以浮点数的形态加以存储, 用以避免出现精准度流失。倘若在两个之中找寻不到相同的index, 相对应的位置即刻返回一个空值NaN。如下方样式显示:

2 数据结构以及操作——

:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将理解为的容器。

它是一种二维标记的数据结构, 其列能够有不一样的类型。您能把它视作电子表格, 或者SQL表, 抑或是序列对象的dict。它常常是最为常用的对象之一。和系列相同, 它能接纳多种不同类型的输入:

1、一维ndarray的dict,lists, dicts, or Series 2、二维numpy.ndarray 3、结构化或记录 ndarray 4、A Series 5、Another DataFrame

创建方式:

1、用许多 来构建一个:

2、用一个字典来创建 :

获取,设置和删除列的工作方式与类似的dict操作相同:

单单获取一列, 因而返回的便是一个, 其中涵盖index。能够运用type()函数去确认返回值的类型。

如果获取多个列,那返回的就是一个 类型:

往 里面增添数据列, 在创建一个列之际, 你得先将此列的数据以及索引给定义好, 比方说像下图这样的:

增加数据列有以下两种办法:

——可以从头开始定义一个 pd.,再把它放到表中:

——也可以利用现有的列来产生需要的新列。

从 里删除行/列:

存在这样一种情况, 要是你期望摒弃某一行或者某一列, 那就能够运用drop()函数。当你在运用此函数之际, 你得预先明确提及具体要删除的导向路径, axis=0与之匹配、对应的恰似是那行row, 而axis=1与之匹配、对应的则是那列。

删除 ‘’ 列/“d”行:

留神, 除非用户确切指明, 为避免用户因错误操作致使数据遗失, 于调用 drop() 之际, 并不会切实永久性地移除该行/列。能够借由调用 df 来证实数据的完整性(df 便可呈现未被永久删去的)。若你笃定要永久性地删除某一行/列, 你得添加上 =True 参数, 例如:

获取 中的一行或多行数据:

获取某一行时, loc可按索引(或标签名)进行引用, 或者使用iloc, 借着行在表里的位置(行数(从0起始))来引用, 情况若下:

一行:

多行:

同一时间你能够运用loc去指定明晰的行列范畴, 进而给出一个子数据表。举例说明, 要提取“b”这一行里“Name”这一列的元素(要提取“b”、“c”这两行中的name以及Year这一列的元素), 能够按照以下方式来操作:

条件筛选

换用中括号的形式, 除了直接去指定选中某些列之外, 还能够接收一个条件语句, 接着筛选出符合该条件的行, 之后再筛选出符合该条件的列。

randn(d1,d2…, dn)函数会生成符合正态分布的随机数, 其中, n代表着维数, 在此维度下, 二维便如同图中所示, 呈现出5行4列的形态。

创建(data,index,属性)

上图的结果即下图的前两个表达式

同样能够运用逻辑运算符, 其中包括&(与)以及|(或), 以此来连接多个条件语句, 进而实现将多个筛选条件一次性应用到当前的之上。举例来说的话, 我们能够采用如下的方式进行操作, 筛选出那些同时符合‘W’>0以及’X’>1这两个条件的行, 最终所呈现的结果就如同接下来所展示的图片那样。

重置并设置 的索引

要是你认为当下的索引存在问题, 那么能够先借助.( )简便且直接地去将整个表的索引全部重置删除哦。

这个办法会于一个名为 index 的列以内存留目标 的索引, 并且把表格的索引转变为从初始的零起始排起的数字, 也就是。

0, …, len(data) - 1

。比如下面这样:

其实它跟删除操作大致是相同的情况, (). 一般是不会致使所提及的表格索引有永久性变化的, 条件是在你具体进行调用操作时, 并未明确经由方式传入相应的详细参数, 就好比说: .(=True) 这种特定样子的参数。

且之后运用.( )方式, 把 之中的某一列为索引予以使用呐。好比, 在此时的这个表格内部营造一个称作 “ID” 的列:

注意, 不同于.( ), .( )不会保留一个备份, 之后才用默认的索引值去代替原索引, 而是会完全覆盖原来的索引值, .( )会保留一个备份, 然后才用默认的索引值代替原索引。

多级索引()以及命名索引的不同等级

多级索引实际上是这样一种东西, 它是一个列表, 这个列表是由元组(Tuple)构成的, 每一个元组具备独特单一的性质, 不存在重复情况, 对不对呀。

你能够于一个涵盖诸多数组的列表内开展多级索引创建(调取.)。

——也可以用一个包含许多元组的列表(调用 . )

或者是运用一对处于可迭代状态之下的对象所形成的集合, 像是两种列表那般, 彼此相互做两两对应的匹配, 进而展开构建, 也就是进行调用。

我们从元组中创建多级索引:

3.x里, 为了降低内存消耗, zip()返回的是对象, 若要展示列表, 得手动用list()转换, zip()函数把可迭代对象当参数, 将对象里对应元素打包成一个个元组, 接着返回由这些元组构成的列表。

若各个迭代器当中的元素数量并非一致, 那么便返回列表自身的长度与最短的那个对象是相同的, 借助 * 号操作符, 能够将元组解压成为列表。

最后, 这个将 list(zip()) 作为嵌套的函数, 把上面的两个列表合并成了一个列表, 该列表的每个元素都是元组。这时, 内容是这样的:

(“普通教育证书普通水平考试”, 21那个刻度), (“普通教育证书普通水平考试”, 22那个位置), (“普通教育证书普通水平考试”, 又到了23嘛), (“普通教育证书高级水平考试”, 21的刻度点), (“普通教育证书高级水平考试”, 22此刻地点), (“普通教育证书高级水平考试”, 23的特定所在)。

接下来,我们调用 ..() 生成一个多级索引对象,:

最后,将这个多级索引对象转成一个 :

想要获取处于多级索引里的数据, 依旧会用到. loc。举例来说, 首先获取‘O Level’方面的数据:

然后再用一次 .loc,获取下一层 21 里的数据:

如上所展示的那样, df这个对象的头两个索引列呈现出没有名字的状态, 鉴于存在着相应的需求, 我们能够运用.index.names为它们赋予名字。

我们能够运用.xs() 方法的方式, 以轻松的状态获取到多级索引里某些特定级别的数据。举例来说, 我们需要找到的所有之中, Num等于22的那些行:

缺失值的处理:

好多情形下, 倘若你借助 去读取巨量数据, 常常会发觉原始数据里存有不完备之处。于 这点当中缺少数据的所在位置后, 会自行填入一个空的值,就像下面这个图里的NaN。

将存在一个或多个空值的行(或者列)予以删除这样的操作, 得利用.()来丢弃那些自动填充的值, 当运用.( )方法之际, 便是在告知要进行删除操作, 删除行要借助.(axis = 0) , 删除列所采用的是.(axis = 1) , 且默认axis = 0。

填充缺失值: .( ) 会自动针对这些空值去填充数据, 运用.( ) 方法, 会对这个里全部的空值位置填入你所指定的默认值。例如, 把表中所有的 NaN 替换为 20:

同样的情况是, .()方法以及.(该项)方法, 不会对数据造成长久性的改变, 除了你把=True这一参数传递进去之外。

’分组统计

能依据某一列的内容来对数据行展开分组的分组统计功能开启后, 会针对其运用统计函数, 诸如求和而言呢, 还有平均数, 以及中位数, 再就是标准差等。

首先初始化一个,如下图,

使用.( ) 方法, 我们能够针对下面这一数据表依照 ‘’ 列来开展分组, 接着运用.mean( ) 去求取每组的平均值:

能够运用, .count() 这个方法, 去, 对某一个元素, 在, 下面像这样的数据描述当中出现的次数, 进行计数 句号。

方法会针对里的数据展开分析, 进而一次性生成好多描述性的统计指标, 凭借这些能方便用户对于数据形成一种直观层面的认识, 所生成的指标, 从左边开始到右边依次是: 计数, 平均数, 标准差, 最小值, 处于25% 50% 75%位置的某个值, 最大值。

然后用 .() 方法获得一个竖排的格式:

使用,可以只看指定的指标:

堆叠()

多个进行简单地堆放在一起, 从而拼成一个更大的, 这基本上就是堆叠。当你开展堆叠动作的时候, 堆叠之际要留意数据表的索引以及列的延伸方向, 并且堆叠的方向需和其所指要一致, 使其达成既定之模样。

默认按行的方向堆叠,把每个表的索引按顺序叠加。

按列的方向堆叠,那你需要传入 axis=1 参数:

从上边那幅图能够知道, 出现了好多空值, 由于我们用于堆叠的那3个里边, 存在好多索引, 而这些索引都没有能与之相对应的数据, 所以当运用pd.()的时候, 务必要留意堆叠方向的坐标轴, 也就是行或者列, 要包含所需的全部数据。

归并(Merge)

运用 pd.merge() 函数, 可把多个进行归并, 使之汇聚一处, 其具备的合并方式, 与合并 SQL 数据表的那种方式相类似, 是这样的情况。

归并操作的基本语法:

pd.merge(left, right, how='inner', on='Key') 其中 left 参数代表放在左侧的 DataFrame,而 right 参数代表放在右边的 DataFrame; how='inner' 指的是当左右两个 DataFrame 中存在不重合的 Key 时,取结果的方式:默认:inner 内连接,取交集”,outer 外连接,取并集,并用nan填充”,left 左连接, 左侧取全部,右侧取部分”,right 右连接,左侧取部分,右侧取全部” 最后,on='Key' 代表需要合并的键值所在的列,最后整个表格会以该列为准进行归并。

对于两个都含有 key 列的 ,我们可以这样归并:

也可以传入多个 on 参数,这样就能按多个键值进行归并:

连接(Join)

要是打算将两个表连接到一块儿, 可是它们相互之间并没有太多共有的列, 那么能够挑选运用.join() 办法。跟 .merge() 有差异, 连接选取索引当成公共的键, 并非是某一列。

同样, inner表示内连接, 即取交集, outer表示外连接, 也就是取并集, 且要用nan填充, left表示左连接, 是左侧取全部, 右侧取部分, right表示右连接, 为左侧取部分, 右侧取全部。

查找不重复的值

视为独一无二的是当中不重复的值, 找到不重复的值有助 在数据分析里避免样本偏差, 在其中,会主要用到相关的3种API方法:

去采用, 那样一种, 方式办法。就好比于, 在接下来的, 这般情形里, 去寻觅, col2这一列当中, 全部不存在重复情况的, 那些数值:

.() 方法,获取所有不重复值的个数:

.() 同时获得所有值和对应值的计数:

apply() 方法

那.apply()这个方法呢, 是向其中的数据去应用自定义函数, 以此来开展数据处理的操作。

比如说, 我们首先去把一个 () 函数给定义出来, 接着呢, 针对表当中的 col1 列, 去将这个函数加以应用:

这一列里的每一个元素, 均会被应用函数。如此这般, 任意的内置函数, 便可以被我们调用。比如说, 对 col3列取其长度len:

运用表达式, 通过匿名手段来取代函数给出的定义, 实现代码的整体简化, 比如说, 能够借助这样经由表达式开展行动, 为上面In处的函数定义予以替代:

获取 的属性

属性涵盖列以及索引的名字, 倘若你对表内某列名是否包含像空格这类字符不能确定之时,你能够借助.去获取属性值借此查看确切的列名。

排序(sort)

.() 将整个表按某一列的值进行排序:

请注意, 表格要变成按照col2列的值从小到大进行排序, 需要留意的是, 表格的索引也就是index, 它依旧对应着排序之前的行, 并没有因为排序这个行为而丢失原先的索引数据。

查找空值

当数据集呈现出极为庞大的状态之时, 运用所提及的颇具特定性的特定方法, 能够以便捷且快速的方式去发现表格之中存在的空值:

该方法返回的是一个全新的, 其中借助布尔值(True/False)来表明原内容里对应位置的数据是不是空值。

数据透视表

在运用Excel之际, 其具备数据透视表功能, 同样地, 也存在着包含数据分组、切片、筛选、排序、计数、求和, 或取平均值等功能的值, 并经过展现和汇总统计而出。的数据透视表所呈现的是来源于原本表格之中的数据汇总统计结果, 能够自动协助你对直观出现的数据进行上述各种操作 的功能, 且将最终结果呈现地显示出来。

举个例子,这里有个关于动物的统计表:

数据透视表的语法是:

df .pivot_table(data, values='', index=[''], columns=['']) #values代表我们需要汇总统计的数据所在的列 #index 表示按该列进行分组索引 #columns 则表示最后结果将按该列的数据进行分列

在, 的官方文档里头, 能找寻到更多, 关于数据透视表的, 详尽用法以及例子。

下面,我们就来给这个动物统计表创建一个数据透视表:

——可以直接用上述语法(data就是源):

——也可以直接将data作为对象调用该方法:

留意, 要是原本的数据当中不存在与之对应的条件之下的数据, 那么数据透视表的这个位置便是NaN空值。

导入导出数据(文件操作)

对于 pd.read_ 这般的方法, 你是能够用以, 读取各类各异格式的数据文件, 这些文件囊括了 Excel 表格、CSV 文件、SQL 数据库以至于 HTML 文件等等。

——读取 CSV 文件:

pd.() 就能将 CSV 文件里的数据转换成 对象:

——写入 CSV 文件:

为对象存入.csv文件所运用的方式是.(), 比如说, 我们首先去创建一个对象呢, 接着去将该对象存为‘’文件, 此时会在磁盘上自动创建这个文件:

在上图里, 将 index=False 参数传入, 原因是存有这样的期望, 即不把索引列的从 0 至 5 的这些内容存放到文件之中。

读取Excel表格文件, Excel文件身为一个不错的数据来源, 运用pd.()方法, 我们能够把Excel表格里的数据导入其中, 然而请注意, 仅仅只能导入表格文件内的数据, 其他对象, 像宏、图形以及公式等均不会被导入, 要是文件里存在此类对象 , 兴许会致使pd.()方法执行失败。

留意: 每一个 Excel 表格文档有也许包含一个或者多个工作表, 传入等于两个单引号这样的参数, 这就意味着仅仅读取以 ‘.xlsx’ 为后缀名的文件里的工作表当中的内容。

——写入 Excel 表格文件:

跟上把内容写入CSV文件的情况相类似, 我们能够把一个对象保存成为.xlsx文件, 其中所使用的语法是这个.() , 而我们要将数据存放到那个‘.xlsx’文件当中:

——读取 HTML 文件中的数据:

要读取HTML文件, 首先得安装, lxml, 还有库。

拿来举个例子, 运用读取此页面的数据, 鉴于一个页面当中存有多个各异的表格, 得借助下标。

0, …, len() - 1

访问表格列表中的不同元素。

下面的这个例子,我们显示的是该页面中的第 2 个表格:

3 数据结构以及操作——时间序列(Time- )

(起始点=None, 结束点=None,=None, 频率='日', 时区=None,=假的, 名称=None,=None, **)。

功能:返回一个固定的频率,以日(日历D)作为默认频率

参数, 它是start, 这种形式类似or, 为空时None可得, 其为生成日期的朝着左边方向的边界。

结束: 或者类似的, 无, 生成日期的右边界处。

: , None 要生成的时间段数

频率方面, 或者说, “D”(此为日历日期), 频率字符串能够存在多个, 举例来讲, “S”代表的是秒频率, 标点符号。

返回:rng :

留意: 于三个参数里, start, 以及, and, 这三者之中, 必须要指定两个参数。

比方说, 紧接着的四个例子会产生一样的情况, 不过呢, 这会使start、end以及和的组合发生变化。

——使用默认的每日频率指定开始和结束:

——指定开始和期间,期间数(天):

——指定开始,结束和期间 ; 频率自动生成(线性间隔):

——将频率(频率)更改为’M’(月末频率):

———可以通过时间序列来绘图:

ts=pd.Series(np.random.randn(1000),index=pd.date_range("20170301",periods=1000)) ts=ts.cumsum() #cumsum 返回DataFrame或Series轴上的累积和。 from pylab import * #需要导入绘图模块 ts.plot() #绘图 show() #展示

如下图:

恭喜至此, 这里常用知识你已差不多认识了, 此基础上可好好调教 , 知晓知识还不足, 接下来, 你所需且更重要的是练习, 练习, 练习(重要之事说三遍)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 21:28:02

AI智能体平台选型的5个硬标准:可解释性、状态持久化与私有化水位

1. 这不是选工具,是选“数字分身”的底层逻辑“AI智能体到底怎么选?”——这句话最近在技术群、产品会、甚至咖啡馆里被反复抛出来,像一块试金石,照出不同角色的真实处境:创业者在纠结要不要把客服流程全交给一个智能体…

作者头像 李华
网站建设 2026/9/14 21:27:57

EMC核心原理篇(五):一根导线为什么会变成天线?从电容、电感、E/H场一直讲到真正的电磁辐射

🔥 EMC核心原理篇(五):一根导线为什么会变成天线?从电容、电感、E/H场一直讲到真正的电磁辐射 做汽车电子经常会碰到一个看似很奇怪的现象: 明明只是一根12V电源线,为什么它会辐射? CAN线、USB线、屏线为什么也会变成天线? PCB上一小段走线,什么时候还是“电路”,什…

作者头像 李华
网站建设 2026/9/14 21:27:44

Axure字母分类选择器原型设计与实现

1. 字母分类选择器原型设计概述字母分类选择器是一种常见于移动端应用的交互控件,主要用于快速定位和筛选大量按字母排序的数据项。这种设计模式最早出现在iOS通讯录中,后来被广泛应用于各类需要字母索引的场景,如商品分类、城市选择、音乐列…

作者头像 李华
网站建设 2026/9/14 21:27:31

OpenManus 连上 TaoToken 后,多智能体的长任务不再卡在模型通道上

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 21:26:21

2026一站式AI论文写作软件平台推荐 多场景适配指南

不同学术场景下AI写作工具需求差异不同学术场景的需求差异集中在学科适配、格式要求、合规要求、功能侧重四个方面,用户可根据自身写作场景的核心诉求选择适配的工具,避免功能冗余或需求不匹配。国内学术场景核心需求拆解国内学术写作场景涵盖从学生到科…

作者头像 李华