Compruebe si existe un valor en el índice del marco de datos de pandas
⏰ 5 minutos de lectura
abhi
Estoy seguro de que hay una manera obvia de hacer esto, pero no puedo pensar en nada ingenioso en este momento.
Básicamente, en lugar de generar una excepción, me gustaría obtener True o False para ver si existe un valor en pandas df índice.
import pandas as pd
df = pd.DataFrame({'test':[1,2,3,4]}, index=['a','b','c','d'])
df.loc['g'] # (should give False)
Lo que tengo funcionando ahora es lo siguiente
sum(df.index == 'g')
¿Qué pasa con any(df.index == ‘g’) ?
– lufe
8 mayo 2014 a las 18:13
Esto debería funcionar
'g' in df.index
Esto no parece funcionar cuando varias entradas comparten los mismos valores de índice.
– MaximG
16/10/2014 a las 17:59
@MaximG ¿Qué quieres decir? Esto también funciona para un índice no único.
– joris
30/07/2015 a las 15:40
También funciona para múltiples índices. Si su índice tiene longitud nentonces una tupla de cualquier longitud desde 1..n se puede comprobar
– Minh Triet
5 de marzo de 2018 a las 10:26
Para otros que vienen aquí, es posible que deba usar 'g' in df.columns si su marco de datos se definió con encabezados de columna en lugar de un índice, por ejemplo: df = pandas.DataFrame({'test':[1,2,3,4]}, columns=['a','b','c','d'])
– Tahlor
22 de junio de 2018 a las 14:54
¿Es este tiempo constante o lineal?
– Lokesh
23 de noviembre de 2018 a las 11:00
brócoli2000
El índice múltiple funciona un poco diferente del índice único. Aquí hay algunos métodos para el marco de datos de múltiples índices.
in df.index funciona para el primer nivel solo cuando se verifica un valor de índice único.
'a' in df.index # True
'X' in df.index # False
Controlar df.index.levels para otros niveles.
'a' in df.index.levels[0] # True
'X' in df.index.levels[1] # True
Registrarse df.index para una tupla de combinación de índices.
('a', 'X') in df.index # True
('a', 'Y') in df.index # False
Ezequiel Kruglick
Solo como referencia, ya que era algo que estaba buscando, puede probar la presencia dentro de los valores o el índice agregando el método “.values”, por ejemplo
g in df.<your selected field>.values
g in df.index.values
Encuentro que agregar los “.values” para obtener una lista simple o ndarray out hace que las verificaciones existentes o “in” se ejecuten sin problemas con las otras herramientas de python. Solo pensé en tirar eso por ahí para la gente.
pero AttributeError: el objeto ‘DataFrame’ no tiene atributo ‘field’
– emboscada
30 de julio de 2015 a las 14:13
Hola Ganck. Se suponía que el “campo” mostraría que puede aplicar el método “.values” a varios campos del marco de datos, como columnas o una columna seleccionada. “.index” es un ejemplo de reemplazar “campo” con un campo real que está disponible 🙂 Supongo que podría ser más claro…
– Ezequiel Kruglick
30 de julio de 2015 a las 16:15
Esto fue realmente útil para señalar. Tengo un caso jerárquico donde in g in df.index produce verdadero y in g in df.index.values falso. Interesante.
– watsonic
21/09/2015 a las 20:34
@watsonic: un punto de precaución es ver si uno de esos está devolviendo tuplas debido a la jerarquía. Asegúrese de mirar lo que ambos están publicando (por ejemplo, en ipython o en la línea de comando) para asegurarse de que comprende con qué se está comparando. Otra cosa que puede hacer con los índices jerárquicos es df.index.get_level_values() para que las cosas sean más comprensibles, dependiendo de su aplicación, por supuesto.
– Ezequiel Kruglick
21/09/2015 a las 20:40
Esto aumentará considerablemente el tiempo de búsqueda, porque en lugar de usar el indexador de búsqueda optimizado de pandas, está recorriendo una lista. Disculpas por formatear, python data = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(10000)] data2 = [{'a': random.random(), 'b': random.randint(0, 10), 'c': i} for i in range(100)] df1 = pd.DataFrame.from_records(data) df2 = pd.DataFrame.from_records(data2) timeit 99999 in df2.index # 442ns timeit 99999 in df1.index # 476ns timeit 99999 in df2.index.values # 3310ns timeit 99999 in df1.index.values # 63900ns
– S.G.
11 oct 2021 a las 11:05
xxijoel
El siguiente código no se imprime booleano, pero permite subconjuntos de tramas de datos por índice… Entiendo que probablemente esta no sea la forma más eficiente de resolver el problema, pero (1) me gusta la forma en que se lee y (2) puede subdividir fácilmente donde existe el índice df1 en df2:
df3 = df1[df1.index.isin(df2.index)]
o donde el índice df1 no existe en df2…
df3 = df1[~df1.index.isin(df2.index)]
con marco de datos: df_data
>>> df_data
id name value
0 a ampha 1
1 b beta 2
2 c ce 3
>>> 1 in getattr(df_data, 'value')
True
>>> '1' in getattr(df_data, 'value')
False
muy divertido
isin no verificará el dtype. df['value'].isin([True]).any() prueba esto, también te dará True, porque coincide con 1. True -> 1.
– Mohamed Thasin ah
22 de marzo de 2019 a las 8:23
Guillaume Jacquenot
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")
isin no verificará el dtype. df['value'].isin([True]).any() prueba esto, también te dará True, porque coincide con 1. True -> 1.
– Mohamed Thasin ah
22 de marzo de 2019 a las 8:23
Me gusta usar:
if 'value' in df.index.get_level_values(0):
print(True)
obtener_valores_de_nivel El método es bueno porque le permite obtener el valor en los índices sin importar si su índice es simple o compuesto.
Use 0 (cero) si tiene un solo índice en su marco de datos [or you want to check the first index in multiple index levels]. Utilice 1 para el segundo índice, y así sucesivamente…
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
¿Qué pasa con any(df.index == ‘g’) ?
– lufe
8 mayo 2014 a las 18:13