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?
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
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
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