Jeg har konstrueret en betingelse, der udtrækker præcis én række fra min dataramme:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Nu vil jeg gerne tage en værdi fra en bestemt kolonne:
val = d2['col_name']
Men som resultat får jeg en dataramme, der indeholder én række og én kolonne (*dvs. én celle). Det er ikke det, jeg har brug for. Jeg har brug for én værdi (ét float-tal). Hvordan kan jeg gøre det i pandas?
Hvis du har et DataFrame med kun én række, skal du få adgang til den første (eneste) række som en serie ved hjælp af iloc
og derefter til værdien ved hjælp af 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
Disse er hurtig adgang 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
Det ser ud til at være ændringer efter pandas 10.1/13.1
Jeg opgraderede fra 10.1 til 13.1, før iloc ikke er tilgængelig.
Nu med 13.1 får iloc[0]['label']
et array med en enkelt værdi i stedet for en skalar.
Som dette:
lastprice=stock.iloc[-1]['Close']
Output:
date
2014-02-26 118.2
name:Close, dtype: float64