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)