Hoe krijg ik een waarde uit een cel van een dataframe?

Ik heb een voorwaarde geconstrueerd die precies één rij uit mijn data frame haalt:

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]

Nu zou ik graag een waarde uit een bepaalde kolom halen:

val = d2['col_name']

Maar als resultaat krijg ik een dataframe dat één rij en één kolom bevat (d.w.z. één cel). Dat is niet wat ik nodig heb. Ik heb één waarde nodig (één float getal). Hoe kan ik dat doen in pandas?

Oplossing

Als je een DataFrame hebt met maar één rij, dan benader je de eerste (enige) rij als een Reeks met iloc, en vervolgens de waarde met de kolomnaam:

In [3]: sub_df
Out[3]:
          A         B
2 -0.133653 -0.030854

In [4]: sub_df.iloc[0]
Out[4]:
A   -0.133653
B   -0.030854
Name: 2, dtype: float64

In [5]: sub_df.iloc[0]['A']
Out[5]: -0.13365288513107493
Commentaren (4)

Deze zijn snel toegankelijk voor scalars

In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC'))

In [16]: df
Out[16]: 
          A         B         C
0 -0.074172 -0.090626  0.038272
1 -0.128545  0.762088 -0.714816
2  0.201498 -0.734963  0.558397
3  1.563307 -1.186415  0.848246
4  0.205171  0.962514  0.037709

In [17]: df.iat[0,0]
Out[17]: -0.074171888537611502

In [18]: df.at[0,'A']
Out[18]: -0.074171888537611502
Commentaren (3)

Het lijkt op veranderingen na pandas 10.1/13.1

Ik heb een upgrade gedaan van 10.1 naar 13.1, voordat iloc niet beschikbaar was.

Nu met 13.1, iloc[0]['label'] krijgt een enkele waarde array in plaats van een scalar.

Zoals dit:

lastprice=stock.iloc[-1]['Close']

Uitgang:

date
2014-02-26 118.2
name:Close, dtype: float64
Commentaren (3)