Ik heb een voorwaarde geconstrueerd die precies één rij extraheert uit mijn dataframe:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Nu wil ik een waarde uit een bepaalde kolom nemen:
val = d2['col_name']
Maar als resultaat krijg ik een dataframe dat één rij en één kolom bevat (d.w.z.één cel). Het is niet wat ik nodig heb. Ik heb één waarde nodig (één float-nummer). Hoe kan ik het in panda’s doen?
Antwoord 1, autoriteit 100%
Als je een DataFrame hebt met slechts één rij, ga dan naar de eerste (enige) rij als een serie met iloc
en vervolgens de waarde met de kolomnaam:
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
Antwoord 2, autoriteit 47%
Dit zijn snelle toegang voor scalars
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
Antwoord 3, autoriteit 28%
U kunt uw 1×1-dataframe in een Numpy-array veranderen en vervolgens op de eerste en enige waarde van die array:
val = d2['col_name'].values[0]
Antwoord 4, Autoriteit 5%
De meeste antwoorden gebruiken iloc
die goed is voor selectie op positie.
Als u selectie-by-label loc
zou handiger zijn.
Voor het uitdrukkelijk een waarde krijgen (equiv to verouderd
df.get_value (‘A’, ‘A’)# this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932
Antwoord 5, Autoriteit 4%
Ik had de waarde van één cel nodig, geselecteerd op kolom- en indexnamen.
Deze oplossing werkte voor mij:
original_conversion_frequency.loc[1,:].values[0]
Antwoord 6, Autoriteit 4%
Het hoeft niet ingewikkeld te zijn:
val = df.loc[df.wd==1, 'col_name'].values[0]
Antwoord 7, Autoriteit 3%
Het lijkt op veranderingen na Panda’s 10.1 / 13.1
Ik heb een upgrade van 10.1 naar 13.1, voordat ILOC niet beschikbaar is.
Nu met 13.1, iloc[0]['label']
krijgt een enkele waarde-array in plaats van een scalaire.
Zoals dit:
lastprice=stock.iloc[-1]['Close']
Uitgang:
date
2014-02-26 118.2
name:Close, dtype: float64
Antwoord 8, Autoriteit 2%
De snelste/gemakkelijkste opties die ik heb gevonden zijn de volgende. 501 vertegenwoordigt de rij-index.
df.at[501,'column_name']
df.get_value(501,'column_name')
Antwoord 9
Ik weet niet zeker of dit een goede gewoonte is, maar ik heb gemerkt dat ik ook alleen de waarde kan krijgen door de serie te casten als float
.
bijv.
rate
3 0,042679
Naam: Unemployment_rate, dtype: float64
float(rate)
0.0426789
Antwoord 10
Voor panda’s 0.10, waarbij iloc
niet beschikbaar is, filtert u een DF
en haalt u de eerste rijgegevens op voor de kolom VALUE
:
df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')
als er meer dan 1 rij is gefilterd, verkrijg dan de waarde van de eerste rij. Er zal een uitzondering zijn als het filter resulteert in een leeg gegevensframe.
Antwoord 11
df_gdp.columns
Index([u’Land’, u’Landcode’, u’Indicatornaam’, u’Indicatorcode’,
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 = ‘Object’)
df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]
8100000000000.0
Antwoord 12
het converteren naar integer werkte voor mij:
int(sub_df.iloc[0])
Antwoord 13
Om de waarde van de volledige rij als JSON (in plaats van een serie) te krijgen:
row = df.iloc[0]
Gebruik de to_json
methode zoals hieronder:
row.to_json()