Kaip gauti reikšmę iš duomenų rėmelio ląstelės?

Sukūriau sąlygą, pagal kurią iš duomenų rėmelio išgaunama lygiai viena eilutė:

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

Dabar norėčiau paimti reikšmę iš tam tikro stulpelio:

val = d2['col_name']

Tačiau gaunu duomenų rėmelį, kuriame yra viena eilutė ir vienas stulpelis (t. y. vienas langelis). Tai nėra tai, ko man reikia. Man reikia vienos vertės (vieno kintamojo skaičiaus). Kaip tai padaryti pandose?

Sprendimas

Jei turite DataFrame, kuriame yra tik viena eilutė, tuomet pirmąją (vienintelę) eilutę pasiekite kaip Series, naudodami iloc, o reikšmę - naudodami stulpelio pavadinimą:

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

Tai greita prieiga prie skaliarų

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

Atrodo, kad pakeitimai po pandas 10.1/13.1

Atnaujinau iš 10.1 į 13.1, prieš tai iloc nėra.

Dabar su 13.1 iloc[0]['label'] gauna ne skalarą, o vienos reikšmės masyvą.

Pavyzdžiui, taip:

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

Išvestis:

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