web-dev-qa-db-fra.com

Comment obtenir une valeur unique sous forme de chaîne à partir de pandas dataframe

Je demande une seule valeur de mon bloc de données qui semble être "dtype: object". Je veux simplement imprimer la valeur telle qu'elle est sans imprimer aussi l'index ou d'autres informations. Comment puis-je faire cela?

col_names = ['Host', 'Port']
df = pd.DataFrame(columns=col_names)
df.loc[len(df)] = ['a', 'b']

t = df[df['Host'] == 'a']['Port']
print(t)

PRODUCTION: enter image description here

RÉSULTAT ATTENDU: b

6
Oamar Kanji

Si vous pouvez garantir qu'un seul résultat est retourné, utilisez loc et appelez item:

>>> df.loc[df['Host'] == 'a', 'Port'].item()
'b'

Ou, de même,

>>> df.loc[df['Host'] == 'a', 'Port'].values[0]
'b'

... pour obtenir la valeur first (de même, .values[1] pour le second). C'est mieux que df.loc[df['Host'] == 'a', 'Port'][0] car, si votre DataFrame ressemble à ceci,

  Host Port
1    a    b

Ensuite, "KeyError: 0" sera lancé—

df.loc[df['Host'] == 'a', 'Port'][0]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)

Vous pouvez également utiliser at:

>>> df.at[df['Host'].eq('a').idxmax(), 'Port']
'b'

L'inconvénient est que si "a" n'existe pas, idxmax renverra le premier index (et renverra un résultat incorrect).

5
cs95

cela devrait fonctionner simplement ..

>>> df
  Host Port
0    a    b
>>> df[df['Host'] == 'a']['Port'][0]   # will choose the first index simply which is 'b'
'b'

OU, utilisez avec un imprimé qui supprimera les tiques entourées.

>>> print(df[df['Host'] == 'a']['Port'][0])
b

Cela sera plus facile car vous venez de choisir l'index souhaité même si vous avez plusieurs valeurs sur les colonnes Port

Exemple:

>>> df
  Host Port
0    a    b
1    c    c

Recherche de a et c distincts en fonction de l'index:

>>> df[df['Host'] == 'a']['Port'][0]
'b'
>>> df[df['Host'] == 'c']['Port'][1]
'c'
1
Karn Kumar

Comme mentionné dans mon commentaire, l'utilisation de [1] devrait fonctionner ensuite, pour extraire la variable que vous recherchez.

t = df[df['Host'] == 'a']['Port'][1]
1
PL200