Pandas:缓冲区的维数错误

Posted

技术标签:

【中文标题】Pandas:缓冲区的维数错误【英文标题】:Pandas: Buffer has wrong number of dimensions 【发布时间】:2018-01-07 13:10:48 【问题描述】:

以下是我的代码(仅模拟数字):

import pandas as pd 
d = 'x' : [1,4,6,9],
     'y' : [1,4,6,8]
df = pd.DataFrame(d)
ct = pd.concat([df.x,
                pd.cut(df.y, bins=2)], axis=1)
gp = ct.groupby('x').y.value_counts().unstack().fillna(0)
print(gp)
print(gp[gp.columns[0]])
gp[gp.columns[0]] = gp[gp.columns[0]]/10

print(gp) 给出:

y  (0.993, 4.5]  (4.5, 8.0]
x                          
1           1.0         0.0
4           1.0         0.0
6           0.0         1.0
9           0.0         1.0

print(gp[gp.columns[0]]) 给出了这个:

x
1    1.0
4    1.0
6    0.0
9    0.0
Name: (0.993, 4.5], dtype: float64

但是下面一行:

gp[gp.columns[0]] = gp[gp.columns[0]]/10

抛出此错误:

ValueError: Buffer has wrong number of dimensions (expected 1, got 0)

是什么导致了这个错误?

【问题讨论】:

我无法重现您的错误。 这很奇怪。我正在使用 Anaconda 64 位。这有什么关系吗? 我使用 Pandas '0.18.1',64 位。 我使用的是 0.20.3 【参考方案1】:

这对我来说似乎是一个错误。甚至以下也会产生错误

gp.loc[:, gp.columns[0]] /= 10
ValueError: Buffer has wrong number of dimensions (expected 1, got 0)

但是,如果您向pd.cut 提供标签,您就可以解决问题。

d = 'x' : [1,4,6,9],
     'y' : [1,4,6,8]
df = pd.DataFrame(d)
ct = pd.concat([df.x,
                pd.cut(df.y, bins=2, labels=range(2))], axis=1)
gp = ct.groupby('x').y.value_counts().unstack(fill_value=0)

gp.loc[:, gp.columns[0]] /= 10

gp

y    0  1
x        
1  0.1  0
4  0.1  0
6  0.0  1
9  0.0  1

【讨论】:

是的,现在可以了。我真的开始质疑我自己对 Pandas 的理解。

以上是关于Pandas:缓冲区的维数错误的主要内容,如果未能解决你的问题,请参考以下文章

Cython ValueError:缓冲区的维数错误(预期为 2,得到 3)

Python scikits - 缓冲区的维数错误(预期为 1,得到 2)

错误的维数:预期为 0,得到 1,形状为 (1,)

通道交换需要与 caffe 中的输入通道错误具有相同的维数

在 OpenCV 中使用 PCA 进行降维,特征向量的维数错误

如何找到数组的维数?