verificar si la variable es un marco de datos

2 minutos de lectura

avatar de usuario
trbck

cuando se llama a mi función f con una variable, quiero verificar si var es un marco de datos de pandas:

def f(var):
    if var == pd.DataFrame():
        print "do stuff"

Supongo que la solución podría ser bastante simple, pero incluso con

def f(var):
    if var.values != None:
        print "do stuff"

No puedo hacer que funcione como se esperaba.

  • Su código dice “si var es igual a un marco de datos vacío”. Lo que realmente quiere es “si el tipo de var es igual al tipo pd.DataFrame“. Puedes verificar eso usando isinstance

    – Katriel

    11 de febrero de 2013 a las 9:17

avatar de usuario
Jakub M.

Usar isinstancenada más:

if isinstance(x, pd.DataFrame):
    ... # do something

PEP8 dice explícitamente que isinstance es la forma preferida de comprobar los tipos

No:  type(x) is pd.DataFrame
No:  type(x) == pd.DataFrame
Yes: isinstance(x, pd.DataFrame)

Y ni siquiera pienses en

if obj.__class__.__name__ = 'DataFrame':
    expect_problems_some_day()

isinstance maneja la herencia (ver ¿Cuáles son las diferencias entre type() y isinstance()?). Por ejemplo, le dirá si una variable es una cadena (ya sea str o unicode), porque derivan de basestring)

if isinstance(obj, basestring):
    i_am_string(obj)

Especificamente para pandas DataFrame objetos:

import pandas as pd
isinstance(var, pd.DataFrame)

avatar de usuario
Rutger Kassie

Utilice el incorporado isinstance() función.

import pandas as pd

def f(var):
    if isinstance(var, pd.DataFrame):
        print("do stuff")

  • ¿Cómo puedes generalizar esto al caso en el que un usuario puede usar la función que defines, pero no lo hizo? import pandas as pdpero en cambio solo import pandas? Solo realiza un or en ambas posibilidades, o hay algo más sofisticado que no conozco?

    – n1k31t4

    18 de junio de 2017 a las 22:14


  • Una posible solución podría ser colocar la declaración de importación dentro de la función para que no haya posibilidad de que un usuario importe pandas usando algún otro método. Para acelerar las cosas (para evitar importar toda la biblioteca de panda para una simple verificación), puede usar algo como import pandas.DataFrame as panda_type y luego adentro, luego verifique el tipo de matriz usando isinstance(var, panda_type)

    – pacificgilly1992

    31 de diciembre de 2018 a las 20:13

O puede usar la solución más simple: escriba (x) Si es Data Frame, generará “pandas.core.frame.DataFrame”

¿Ha sido útil esta solución?

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
Privacidad