Hvordan få en verdi fra en celle i en dataramme?

Jeg har konstruert en betingelse som trekker ut nøyaktig én rad fra datarammen min:

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

Nå ønsker jeg å ta en verdi fra en bestemt kolonne:

val = d2['col_name']

Men som et resultat får jeg en dataramme som inneholder én rad og én kolonne (* dvs. én celle). Det er ikke det jeg trenger. Jeg trenger én verdi (ett flyttall). Hvordan kan jeg gjøre det i pandaer?

Løsning

Hvis du har en DataFrame med bare én rad, får du tilgang til den første (eneste) raden som en serie ved hjelp av iloc, og deretter verdien ved hjelp av kolonnenavnet:

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
Kommentarer (4)

Dette er rask tilgang for skalarer

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
Kommentarer (3)

Det ser ut som endringer etter pandaer 10.1/13.1

Jeg oppgraderte fra 10.1 til 13.1, før iloc ikke er tilgjengelig.

Nå med 13.1 får iloc[0]['label'] en enkelt verdimatrise i stedet for en skalar.

Som dette:

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

Output:

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