2012-07-23 260 views
9

我似乎無法找到一個整數索引index a pandas.DataFrame的優雅方式。 在下面的示例中,我想從'A'列的第一個元素中獲取值「a」。用整數索引熊貓數據幀

import pandas 
df = pandas.DataFrame(
    {'A':['a','b', 'c'], 'B':['f', 'g', 'h']}, 
    index=[10,20,30] 
    ) 

我希望df['A'].ix[0]df['A'][10]都返回'a'df['A'][10]確實會返回'a',但df['A'].ix[0]會拋出KeyError: 0。我能想到的基於索引0獲得值'a'的唯一方法是使用以下方法。

df['A'][df['A'].index[0]] 

有一個較短的方式來獲得'a'出來的數據幀,採用0指數?

更新

由於大熊貓0.11的還有另一種方式來index by integer

df.iloc[0] # integer based, gives the first row 
df.loc[10] # label based, gives the row with label 10 

supersedesirow方法。

回答

12

你,因爲你的索引不會從0開始得到與df['A'].ix[0]一個錯誤,它開始於10。你可以讓你通過正確的想用下面的

df['A'].ix[10] 
df['A'].irow(0) 

第一個使用的價值指數。第二個命令,我懷疑是你想要的,通過行號找到值,而不是索引值,技術上只有兩個字符比如果df['A'].ix[0]工作。

或者,你可以重新索引,這樣他們會爲您期待df['A'].ix[0]的響應方式:

df2=df.reset_index() 

這將它們移動到列保存舊的指標(10,20,等)在df2數據幀中稱爲「索引」。然後df2['A'].ix[0]將返回'a'。如果要刪除舊的基於10的索引,可以將標誌drop=True插入到reset_index函數的括號中。

+0

我認爲它是'df ['A']。iget(0)'因爲'df ['A']'是一個沒有'irow'的'Series'。 – Eike 2013-03-09 19:40:15

+3

irow()已棄用。使用iloc []進行基於位置的索引。 – herrlich10 2014-02-07 03:57:40

0

在較新的熊貓版本中,你也可以使用df [「A」]。iat(0)。