Wie bekomme ich einen Wert von einer Zelle eines Datenrahmens?

Ich habe eine Bedingung konstruiert, die genau eine Zeile aus meinem Datenrahmen extrahiert:

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

Jetzt möchte ich einen Wert aus einer bestimmten Spalte nehmen:

 val = d2['col_name'] 

Aber als Ergebnis bekomme ich einen Datenrahmen, der eine Zeile und eine Spalte ( dh eine Zelle) enthält. Es ist nicht das, was ich brauche. Ich brauche einen Wert (eine Gleitzahl). Wie kann ich es in Pandas machen?

   

Wenn Sie einen DataFrame mit nur einer Zeile haben, greifen Sie mithilfe von iloc auf die erste (einzige) Zeile als Serie zu und anschließend den Wert mithilfe des Spaltennamens:

 In [3]: sub_df Out[3]: AB 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 

Dies sind schnelle Zugriffe für Skalare

 In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC')) In [16]: df Out[16]: ABC 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 

Es sieht aus wie Veränderungen nach Pandas 10.1 / 13.1

Ich habe von 10.1 auf 13.1 aktualisiert, bevor iloc nicht verfügbar ist.

Jetzt mit 13.1, iloc[0]['label'] erhält ein Array mit einem einzelnen Wert anstelle eines Skalars.

So was:

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

Ausgabe:

 date 2014-02-26 118.2 name:Close, dtype: float64 

Die meisten Antworten verwenden iloc was für die Auswahl nach Position gut ist.

Wenn Sie eine Auswahl-nach-Etikett- loc benötigen, wäre es bequemer.

Um einen Wert explizit zu erhalten (entspricht veraltetem df.get_value (‘a’, ‘A’))

 # this is also equivalent to df1.at['a','A'] In [55]: df1.loc['a', 'A'] Out[55]: 0.13200317033032932 

Sie können Ihren 1×1-Datenrahmen in ein numpliges Array umwandeln und dann auf den ersten und einzigen Wert dieses Arrays zugreifen:

 val = d2['col_name'].values[0] 

Nicht sicher, ob das eine gute Übung ist, aber ich habe bemerkt, dass ich auch nur den Wert bekommen kann, indem ich die Serie als float .

z.B

 rate 

3 0,042679

Name: Arbeitslosigkeitsrate, dtype: float64

 float(rate) 

0,0426789

Die schnellsten / einfachsten Optionen, die ich gefunden habe, sind die folgenden. 501 repräsentiert den Zeilenindex.

 df.at[501,'column_name'] df.get_value(501,'column_name') 

Für Pandas 0.10, für die iloc ist, filtern Sie einen DF und rufen Sie die ersten Zeilendaten für die Spalte VALUE :

 df_filt = df[df['C1'] == C1val & df['C2'] == C2val] result = df_filt.get_value(df_filt.index[0],'VALUE') 

Wenn mehr als eine Zeile gefiltert ist, besorge dir den ersten Zeilenwert. Es wird eine Ausnahme geben, wenn der Filter zu einem leeren Datenrahmen führt.