python - Pandas 与 Numpy 数据帧

标签 python pandas numpy multidimensional-array dataframe

看看这几行代码:

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 行' s,c 行的 c 行和 d 行的 d 行。对于 ae 行,它将无法在另一个 DataFrame 中找到相应的行(无论是在第一个还是在第二个),因此它将返回 :

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

关于python - Pandas 与 Numpy 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832735/

相关文章:

python - 在 python 中解析 xbrl 文件

python - 将 pandas 数据框中的空格替换为 NAN

python pandas 数据框列的百分比变化

Python TA-Lib 不适用于 Pandas 系列

python - 从命令行或 pkg 中的可执行文件运行时,Py2app 构建可以完美运行,但双击应用程序时则无法运行

python - 运行 '$x("XPath")' in Selenium ' driver.execute_script' JavaScript, chromedriver=111.0.5563.64

python - AttributeError: 'NoneType' 对象没有属性 'add'

python - 使用二级索引复制 DataFrame 中的 n 行?

python - 让 NumPy 在逻辑索引后返回正确形状的数组而不进行 reshape 的简洁方法?

python - 使用 matplotlib 或 PIL 将 3d numpy 数组绘制为 3d 图像