trbck
trbck

Reputation: 5537

check if variable is dataframe

when my function f is called with a variable I want to check if var is a pandas dataframe:

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

I guess the solution might be quite simple but even with

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

I can't get it to work like expected.

Upvotes: 252

Views: 308581

Answers (3)

Aleksandra Milicevic
Aleksandra Milicevic

Reputation: 137

Or you can use the simplest solution: type(x).

If it is Data Frame it will output pandas.core.frame.DataFrame.

Upvotes: 6

Rutger Kassies
Rutger Kassies

Reputation: 64443

Use the built-in isinstance() function.

import pandas as pd

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

Upvotes: 158

Jakub M.
Jakub M.

Reputation: 33827

Use isinstance, nothing else:

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

PEP8 says explicitly that isinstance is the preferred way to check types

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

And don't even think about

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

isinstance handles inheritance (see What are the differences between type() and isinstance()?). For example, it will tell you if a variable is a string (either str or unicode), because they derive from basestring)

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

Specifically for pandas DataFrame objects:

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

Upvotes: 376

Related Questions