Am construit o condiție care extrage exact un rând din cadru de date:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Acum aș dori să ia o valoare dintr-o anumită coloană:
val = d2['col_name']
Dar, ca rezultat, am primit un cadru de date care conține un rând și o coloană (adică o celulă). Nu este ceea ce am nevoie. Am nevoie de o valoare (un float numar). Cum pot face la panda?
Dacă aveți un DataFrame numai cu un rând, atunci accesul primul (singurul) rând ca o Serie folosind `iloc, și atunci valoarea folosind numele coloanei:
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
Acestea sunt accesul rapid pentru scalari
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
Cele mai multe răspunsuri sunt folosind iloc
care este bun pentru selecție de poziție.
Dacă aveți nevoie de selecție de etichetă loc
ar fi mai convenabil.
Pentru a obține o valoare în mod explicit (echiv a depreciat df.get_value('un','Un'))
acest lucru este, de asemenea, echivalent cu df1.la['un','Un']
În [55]: df1.loc['un', 'Un'] Ieșire[55]: 0.13200317033032932
Se pare că se schimbă după panda 10.1/13.1
Am actualizat de la 10.1 la 13,1, înainte de iloc nu este disponibil.
Acum, cu 13.1, iloc[0]['eticheta']
devine o valoare unică matrice, mai degrabă decât un scalar.
Astfel:
lastprice=stock.iloc[-1]['Close']
Ieșire:
date
2014-02-26 118.2
name:Close, dtype: float64
Nu sunt sigur dacă acest lucru este o practică bună, dar am observat că nu pot obține, de asemenea, doar valoarea de turnare seria ca "float".
de exemplu
rate
3 0.042679
Nume: Unemployment_rate, dtype: float64
float(rate)
0.0426789
Pentru panda 0.10, unde iloc` este unavalable, filtru o " DF "și de a lua primul rând de date pentru coloana "VALOARE":
df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')
dacă există mai mult de 1 rand filtrat, obține primul rând valoare. Nu va fi o excepție în cazul în care filtrul rezultat în gol cadru de date.
df_gdp.columns
Index([u'Țară', u'Codul de Țară', u'Indicator Numele', u'Cod Indicator', u'1960', u'1961', u'1962', u'1963', u'1964', u'1965', u'1966', u'1967', u'1968', u'1969', u'1970', u'1971', u'1972', u'1973', u'1974', u'1975', u'1976', u'1977', u'1978', u'1979', u'1980', u'1981', u'1982', u'1983', u'1984', u'1985', u'1986', u'1987', u'1988', u'1989', u'1990', u'1991', u'1992', u'1993', u'1994', u'1995', u'1996', u'1997', u'1998', u'1999', u'2000', u'2001', u'2002', u'2003', u'2004', u'2005', u'2006', u'2007', u'2008', u'2009', u'2010', u'2011', u'2012', u'2013', u'2014', u'2015', u'2016'], dtype='obiect')
df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]
8100000000000.0