2015-12-20 72 views
4

我的理解是pd.DataFrame().shape返回(n_rows,n_columns)。 然而,當構造一個數據幀並且索引與數據形狀不匹配時,熊貓引發一個ValueError,形狀爲(n_columns,n_rows)由Pandas ValueError返回的形狀與數據框形狀不符?

實施例:

df_2 = pd.DataFrame(np.random.randn(10,2), index = range(9)) 

ValueError: Shape of passed values is (2, 10), indices imply (2, 9)

爲什麼ValueError異常不能打印

形狀傳遞的值是(10,2),指數意味着(9,2)

熊貓版本:'0.17.1'

回答

1

當熊貓說「索引」她e表示索引和列(它們都是索引類型)。

In [11]: df = pd.DataFrame(np.random.randn(3,2)) 

In [12]: df.index 
Out[12]: Int64Index([0, 1, 2], dtype='int64') 

In [13]: df.columns 
Out[13]: Int64Index([0, 1], dtype='int64') 

你逝去的東西有一個長度爲9 .index指數,長度2 .columns指數,因此該錯誤信息...
這就是說:你的代碼就相當於:

In [21]: df = pd.DataFrame(np.random.randn(10,2), index=np.arange(9), columns=np.arange(2)) 
ValueError: Shape of passed values is (2, 10), indices imply (2, 9) 
當你想

是:

df = pd.DataFrame(np.random.randn(10,2), index=np.arange(10), colummns=np.arange(2)) 
# equivalently 
df = pd.DataFrame(np.random.randn(10,2), index=np.arange(10)) 
df = pd.DataFrame(np.random.randn(10,2)) 
+0

感謝您的解釋,但我明白爲什麼會引發ValueError。我的問題是爲什麼它說'傳遞值的形狀是(2,10)'。我認爲它應該閱讀'傳遞值的形狀是(10,2)' – imp9

+1

@ imp2啊哈,我看到嗯,這很奇怪。快速調試%,表明它在這裏定義:https://github.com/pydata/pandas/blob/a050a331a7fdf87d8c4290a9a1da00dd56f42595/pandas/core/internals.py#L3876-L3883:s有趣!如果你喜歡修復,我肯定會非常感激! –

0

print range(9)回報:[0, 1, 2, 3, 4, 5, 6, 7, 8],所以給人一種(10,2)[「10乘2」的數組(20列中的20個值)]索引是從零開始的9個值的一維數組,不會「適合」Numpy數組的維數'轉換成Pandas DataFrame。

+0

我的問題不是爲什麼會引發ValueError,而是關於ValueError中的解釋。 – imp9

相關問題