web-dev-qa-db-fra.com

Vérifier si une valeur existe dans pandas index de cadre de données

Je suis sûr qu'il existe un moyen évident de le faire, mais je ne peux penser à rien de louche en ce moment.

Fondamentalement, au lieu de lever une exception, j'aimerais obtenir True ou False pour voir si une valeur existe dans pandas df index.

import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g']  # (should give False)

Ce que je travaille maintenant est la suivante

sum(df.index == 'g')
107
Abhi

Cela devrait faire l'affaire

'g' in df.index
191

Juste pour référence car c’était quelque chose que je recherchais, vous pouvez tester la présence dans les valeurs ou l’index en ajoutant la méthode ".values", par exemple.

g in df.<your selected field>.values
g in df.index.values

Je trouve que l’ajout des ".values" pour obtenir une simple liste ou que ndarray out permet d’exister ou que les contrôles "in" fonctionnent plus facilement avec les autres outils python. Je pensais juste que je lancerais ça pour les gens.

31
Ezekiel Kruglick

L'index multiple fonctionne un peu différemment de l'index simple. Voici quelques méthodes pour la structure de données à index multiples.

df = pd.DataFrame({'col1': ['a', 'b','c', 'd'], 'col2': ['X','X','Y', 'Y'], 'col3': [1, 2, 3, 4]}, columns=['col1', 'col2', 'col3'])
df = df.set_index(['col1', 'col2'])

in df.index fonctionne pour le premier niveau uniquement lors de la vérification d'une valeur d'index unique.

'a' in df.index     # True
'X' in df.index     # False

Vérifiez df.index.levels pour les autres niveaux.

'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True

Vérifiez dans df.index pour une combinaison d'index Tuple.

('a', 'X') in df.index  # True
('a', 'Y') in df.index  # False
23
broccoli2000
df = pandas.DataFrame({'g':[1]}, index=['isStop'])

#df.loc['g']

if 'g' in df.index:
    print("find g")

if 'isStop' in df.index:
    print("find a") 
1
Gank

avec DataFrame: df_data

>>> df_data
  id   name  value
0  a  ampha      1
1  b   beta      2
2  c     ce      3

J'ai essayé:

>>> getattr(df_data, 'value').isin([1]).any()
True
>>> getattr(df_data, 'value').isin(['1']).any()
True

mais:

>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False

Tellement amusant: D

0
Quoc Chi