J'ai construit une condition qui extrait exactement une ligne de mon bloc de données:
d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]
Maintenant, je voudrais prendre une valeur dans une colonne particulière:
val = d2['col_name']
Mais en conséquence, j'obtiens un bloc de données qui contient une ligne et une colonne ( c'est-à-dire une cellule). Ce n'est pas ce dont j'ai besoin. J'ai besoin d'une valeur (un nombre flottant). Comment puis-je le faire chez les pandas?
SettingWithCopyWarning
vous vous êtes retrouvé avec un , vous pouvez consulter ce post pour une explication de l'avertissement et des solutions / solutions possibles.Réponses:
Si vous avez un DataFrame avec une seule ligne, accédez à la première (uniquement) ligne en tant que série à l'aide
iloc
, puis à la valeur en utilisant le nom de la colonne:la source
at
est une réponse vraiment sympa, bien que je trouve cela étrange, c'est commeix
:))my_df.loc[my_df['Col1'] == foo]['Col2']
renvoie toujours un objet de type<class 'pandas.core.series.Series'>
Ce sont un accès rapide pour les scalaires
la source
.iloc[-1]['A']
vous ne pouvez pas le faireat[-1,'A']
pour obtenir l'entrée de la dernière ligneat[df.index[-1],'A']
Vous pouvez transformer votre trame de données 1x1 en un tableau numpy, puis accéder à la première et unique valeur de ce tableau:
la source
.get_values()[0]
également.La plupart des réponses utilisent
iloc
ce qui est bon pour la sélection par position.Si vous avez besoin d'une sélection par étiquette, ce
loc
serait plus pratique.la source
J'avais besoin de la valeur d'une cellule, sélectionnée par les noms de colonne et d'index. Cette solution a fonctionné pour moi:
original_conversion_frequency.loc[1,:].values[0]
la source
Cela ressemble à des changements après les pandas 10.1 / 13.1
J'ai mis à jour la version 10.1 vers la version 13.1, avant qu'iloc ne soit pas disponible.
Maintenant avec 13.1,
iloc[0]['label']
obtient un tableau à valeur unique plutôt qu'un scalaire.Comme ça:
Production:
la source
Les options les plus rapides / faciles que j'ai trouvées sont les suivantes. 501 représente l'index de ligne.
la source
get_value
est obsolète maintenant (v0.21.0 RC1 (13 octobre 2017)) la référence est ici.get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Pour les pandas 0.10, où cela
iloc
n'est pas possible, filtrez aDF
et obtenez les premières données de ligne pour la colonneVALUE
:s'il y a plus d'une ligne filtrée, obtenez la première valeur de ligne. Il y aura une exception si le filtre aboutit à une trame de données vide.
la source
get_value
est obsolète maintenant (v0.21.0 RC1 (13 octobre 2017)) la référence est ici.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
ne peut pas obtenir la valeur basée sur le nom de la colonne.Je ne sais pas si c'est une bonne pratique, mais j'ai remarqué que je peux également obtenir juste la valeur en castant la série en tant que
float
.par exemple
la source
Cela n'a pas besoin d'être compliqué:
la source
la source