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