2017-07-31 77 views
2

的下面是我的代碼(僅小樣號):熊貓:緩衝區有維數錯誤

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) 

是什麼原因造成這個錯誤?

+0

我無法重現您的錯誤。 – DyZ

+0

這很奇怪。我正在使用蟒蛇64位。這有什麼可以做的嗎? – fossekall

+0

我使用熊貓的'0.18.1',64位。 – DyZ

回答

4

這對我來說似乎是一個錯誤。即使是以下產生一個錯誤

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 
+0

是的,現在它可以工作。我真的開始質疑我對熊貓的理解。 – fossekall

+0

我報告了[** bug **](https://github.com/pandas-dev/pandas/issues/17130)。 – piRSquared