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.
Usar isinstance
nada 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)
Utilice el incorporado isinstance()
función.
import pandas as pd
def f(var):
if isinstance(var, pd.DataFrame):
print("do stuff")
O puede usar la solución más simple: escriba (x) Si es Data Frame, generará “pandas.core.frame.DataFrame”
Su código dice “si
var
es igual a un marco de datos vacío”. Lo que realmente quiere es “si el tipo devar
es igual al tipopd.DataFrame
“. Puedes verificar eso usandoisinstance
– Katriel
11 de febrero de 2013 a las 9:17