栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

熊猫文件中的“广播”一词是什么意思?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

熊猫文件中的“广播”一词是什么意思?

因此,术语 广播
来自numpy,简而言之,它解释了您在n维数组(可以是面板,数据框,序列)或标量值之间执行操作时所产生的输出规则。

使用标量值广播

因此,最简单的情况是乘以标量值:

In [4]:s = pd.Series(np.arange(5))sOut[4]:0    01    12    23    34    4dtype: int32In [5]:    s * 10Out[5]:0     01    102    203    304    40dtype: int32

并使用数据框获得相同的预期结果:

In [6]:    df = pd.Dataframe({'a':np.random.randn(4), 'b':np.random.randn(4)})dfOut[6]:          a         b0  0.216920  0.6521931  0.968969  0.0333692  0.637784  0.8568363 -2.303556  0.426238In [7]:    df * 10Out[7]:a         b0   2.169204  6.5219251   9.689690  0.3336952   6.377839  8.5683623 -23.035557  4.262381

因此,从技术上讲,这里的标量值是沿着与上述Series和Dataframe相同的维度 广播 的。

使用一维数组进行广播

假设我们有一个形状为4 x 3(4行x 3列)的2D数据帧,我们可以使用与行长相同长度的1D系列沿x轴执行操作:

In [8]:df = pd.Dataframe({'a':np.random.randn(4), 'b':np.random.randn(4), 'c':np.random.randn(4)})dfOut[8]:          a         b         c0  0.122073 -1.178127 -1.5312541  0.011346 -0.747583 -1.9670792 -0.019716 -0.235676  1.4195473  0.215847  1.112350  0.659432In [26]:    df.iloc[0]Out[26]:a    0.122073b   -1.178127c   -1.531254Name: 0, dtype: float64In [27]:    df + df.iloc[0]Out[27]:          a         b         c0  0.244146 -2.356254 -3.0625071  0.133419 -1.925710 -3.4983332  0.102357 -1.413803 -0.1117073  0.337920 -0.065777 -0.871822

上面的内容乍看之下很有趣,直到您了解发生了什么,我将值的第一行添加到df中,然后可以使用此图片(源自

scipy
)将其可视化:

一般规则是这样的:

为了进行广播,操作中两个阵列的尾轴尺寸必须相同,或者其中之一必须相同。

因此,如果我尝试添加长度不匹配的一维数组,请说一个包含4个元素的数组,与numpy不同,它将

ValueError
在Pandas中引发a
,您将获得一个充满
NaN
值的df :

In [30]:df + pd.Series(np.arange(4))Out[30]:    a   b   c   0   1   2   30 NaN NaN NaN NaN NaN NaN NaN1 NaN NaN NaN NaN NaN NaN NaN2 NaN NaN NaN NaN NaN NaN NaN3 NaN NaN NaN NaN NaN NaN NaN

现在,关于pandas的一些很棒的事情是,它将尝试使用现有的列名和行标签进行对齐,这可能会妨碍尝试进行如下更漂亮的广播:

In [55]:df[['a']] + df.iloc[0]Out[55]:          a   b   c0  0.244146 NaN NaN1  0.133419 NaN NaN2  0.102357 NaN NaN3  0.337920 NaN NaN

在上面,我使用双下标强制将形状设置为(4,1),但是当尝试使用第一行进行广播时,由于列对齐仅在第一列上对齐,因此我们看到一个问题。为了获得与上图所示相同的广播形式,我们必须分解为numpy数组,然后这些数组成为匿名数据:

In [56]:df[['a']].values + df.iloc[0].valuesOut[56]:array([[ 0.24414608, -1.05605392, -1.4091805 ],       [ 0.13341899, -1.166781  , -1.51990758],       [ 0.10235701, -1.19784299, -1.55096957],       [ 0.33792013, -0.96227987, -1.31540645]])

也可以进行3维广播,但是我并不经常去看那些东西,但是那堆麻木,肮脏和熊猫书中有一些例子说明了它是如何工作的。

一般而言,要记住的事情是,除了简单的标量值外,对于nD数组,短轴/尾轴的长度必须匹配,或者其中之一必须为1。

更新资料

似乎上述情况导致

ValueError: Unable to coerce to Series, length must be 1: given3
了最新版本的Pandas
0.20.2

所以你要调用

.values
df
第一:

In[42]:df[['a']].values + df.iloc[0].valuesOut[42]: array([[ 0.244146, -1.056054, -1.409181],       [ 0.133419, -1.166781, -1.519908],       [ 0.102357, -1.197843, -1.55097 ],       [ 0.33792 , -0.96228 , -1.315407]])

要将其恢复为原始df,我们可以从np数组构造一个df并将args中的原始列传递给构造函数:

In[43]:pd.Dataframe(df[['a']].values + df.iloc[0].values, columns=df.columns)Out[43]:a         b         c0  0.244146 -1.056054 -1.4091811  0.133419 -1.166781 -1.5199082  0.102357 -1.197843 -1.5509703  0.337920 -0.962280 -1.315407


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611702.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号