Skonstruowałem warunek, który wyodrębnia dokładnie jeden wiersz z mojej ramki danych:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Teraz chciałbym wziąć wartość z konkretnej kolumny:
val = d2['col_name']
Ale w rezultacie otrzymuję ramkę danych, która zawiera jeden wiersz i jedną kolumnę ( tj. Jedną komórkę). Nie tego potrzebuję. Potrzebuję jednej wartości (jedna liczba zmiennoprzecinkowa). Jak mogę to zrobić w pandach?
SettingWithCopyWarning
, możesz spojrzeć na ten post, aby uzyskać wyjaśnienie ostrzeżenia i możliwych obejść / rozwiązań.Odpowiedzi:
Jeśli masz ramkę danych z tylko jednym wierszem, uzyskaj dostęp do pierwszego (tylko) wiersza jako za pomocą Serii
iloc
, a następnie do wartości za pomocą nazwy kolumny:źródło
at
to naprawdę fajna odpowiedź, choć wydaje mi się to dziwne, że to jakix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
nadal zwraca obiekt typu<class 'pandas.core.series.Series'>
Są to szybki dostęp do skalarów
źródło
.iloc[-1]['A']
, nie możesz zrobić,at[-1,'A']
aby uzyskać ostatni wpis w wierszuat[df.index[-1],'A']
Możesz zmienić ramkę danych 1x1 w tablicę numpy, a następnie uzyskać dostęp do pierwszej i jedynej wartości tej tablicy:
źródło
.get_values()[0]
.Większość odpowiedzi używa,
iloc
co jest dobre do wyboru według pozycji.Jeśli potrzebujesz wyboru według etykiety,
loc
byłoby wygodniej.źródło
Potrzebowałem wartości jednej komórki, wybranej według nazw kolumn i indeksów. To rozwiązanie działało dla mnie:
original_conversion_frequency.loc[1,:].values[0]
źródło
Wygląda jak zmiany po pandach 10.1 / 13.1
Uaktualniłem z 10.1 do 13.1, zanim iloc nie będzie dostępny.
Teraz z 13.1,
iloc[0]['label']
dostaje tablicę pojedynczej wartości, a nie skalar.Lubię to:
Wynik:
źródło
Najszybsze / najłatwiejsze opcje, jakie znalazłem, są następujące. 501 reprezentuje indeks wiersza.
źródło
get_value
jest przestarzałe (v0.21.0 RC1 (13 października 2017 r.)) Odnośnik jest tutaj.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
W przypadku pand 0.10, gdzie
iloc
jest to niemożliwe, odfiltruj aDF
i uzyskaj dane pierwszego wiersza dla kolumnyVALUE
:jeśli filtrowanych jest więcej niż 1 wiersz, uzyskaj wartość pierwszego wiersza. Wystąpi wyjątek, jeśli filtr spowoduje pustą ramkę danych.
źródło
get_value
jest przestarzałe (v0.21.0 RC1 (13 października 2017 r.)) Odnośnik jest tutaj.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
lubat
nie można uzyskać wartości na podstawie nazwy kolumny.Nie jestem pewien, czy jest to dobra praktyka, ale zauważyłem, że mogę również uzyskać wartość, rzucając serię jako
float
.na przykład
źródło
Nie musi być skomplikowane:
źródło
źródło