Eu construí uma condição que extrai exatamente uma linha do meu quadro de dados:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Agora eu gostaria de pegar um valor de uma coluna específica:
val = d2['col_name']
Mas, como resultado, recebo um quadro de dados que contém uma linha e uma coluna ( ou seja, uma célula). Não é o que eu preciso. Eu preciso de um valor (um número flutuante). Como posso fazer isso em pandas?
SettingWithCopyWarning
, consulte esta postagem para obter uma explicação do aviso e possíveis soluções / soluções alternativas.Respostas:
Se você tiver um DataFrame com apenas uma linha, acesse a primeira (apenas) linha como uma Série usando
iloc
e, em seguida, o valor usando o nome da coluna:fonte
at
É uma resposta muito bom, embora eu acho estranho é comoix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
ainda retorna um objeto do tipo<class 'pandas.core.series.Series'>
Estes são acessos rápidos para escalares
fonte
.iloc[-1]['A']
você não pode fazerat[-1,'A']
para obter a última entrada de linhaat[df.index[-1],'A']
Você pode transformar seu quadro de dados 1x1 em uma matriz numpy e acessar o primeiro e único valor dessa matriz:
fonte
.get_values()[0]
Também costumava usar .Está usando a maioria das respostas, o
iloc
que é bom para a seleção por posição.Se você precisar de seleção por rótulo,
loc
seria mais conveniente.fonte
Eu precisava do valor de uma célula, selecionada pelos nomes de colunas e índices. Esta solução funcionou para mim:
original_conversion_frequency.loc[1,:].values[0]
fonte
Parece mudanças após os pandas 10.1 / 13.1
Atualizei de 10.1 para 13.1, antes que o iloc não esteja disponível.
Agora com 13.1,
iloc[0]['label']
obtém uma matriz de valor único em vez de escalar.Como isso:
Resultado:
fonte
As opções mais rápidas / fáceis que encontrei são as seguintes. 501 representa o índice de linha.
fonte
get_value
está obsoleto agora (v0.21.0 RC1 (13 de outubro de 2017)) A referência está aqui.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Para pandas 0.10, onde não pode
iloc
ser navegado, filtre aDF
e obtenha os dados da primeira linha da colunaVALUE
:se houver mais de uma linha filtrada, obtenha o valor da primeira linha. Haverá uma exceção se o filtro resultar em um quadro de dados vazio.
fonte
get_value
foi descontinuado agora (v0.21.0 RC1 (13 de outubro de 2017)) A referência está aqui.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
iat
ouat
não é possível obter o valor com base no nome da coluna.Não tenho certeza se essa é uma boa prática, mas eu notei que também posso obter o valor colocando a série como
float
.por exemplo
fonte
Não precisa ser complicado:
fonte
fonte