繁体   English   中英

熊猫与Numpy Dataframes

[英]Pandas vs. Numpy Dataframes

看看这几行代码:

df2 = df.copy()
df2[1:] = df[1:]/df[:-1].values -1
df2.ix[0, :] = 0

我们的讲师说我们需要使用.values属性来访问底层的numpy数组,否则,我们的代码将无法工作。

我知道pandas DataFrame确实有一个底层表示作为一个numpy数组,但我不明白为什么我们不能使用切片直接在pandas DataFrame上操作。

你能解释一下这个吗?

pandas专注于表格数据结构,在进行操作(加法,减法等)时,它会查看标签 - 而不是位置。

考虑以下DataFrame:

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

这里, df[1:]是:

df[1:]
Out: 
          x         y         z
b  1.003035  0.172960  1.160033
c  0.117608 -1.114294 -0.557413
d -1.312315  1.171520 -1.034012
e -0.380719 -0.422896  1.073535

df[:-1]是:

df[:-1]
Out: 
          x         y         z
a  1.367916  1.087607 -0.625777
b  1.003035  0.172960  1.160033
c  0.117608 -1.114294 -0.557413
d -1.312315  1.171520 -1.034012

如果你df[1:] / df[:-1]这将分排b的按行b的,排c的按行c的和行d '由部列S d的。 对于行ae ,它将无法在其他DataFrame中找到相应的行(在第一个或第二个中),因此它将返回nan

df[1:] / df[:-1]
Out: 
     x    y    z
a  NaN  NaN  NaN
b  1.0  1.0  1.0
c  1.0  1.0  1.0
d  1.0  1.0  1.0
e  NaN  NaN  NaN

如果你只想忽略标签的元素划分,那么通过.values访问其中一个帧的底层numpy数组是一种告诉pandas忽略标签的方法。 由于numpy数组没有标签,pandas只会执行元素操作:

df[1:]/df[:-1].values
Out: 
           x         y         z
b   0.733258  0.159028 -1.853749
c   0.117252 -6.442482 -0.480515
d -11.158359 -1.051357  1.855018
e   0.290112 -0.360981 -1.038223

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM