2Answers
  • 15
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

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.

      • 1
    • Your code says "if var is equal to an empty dataframe". What you really want is "if the type of var is equal to the type pd.DataFrame". You can check that using isinstance

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)
  • 177
Reply Report

Use the built-in isinstance() function.

import pandas as pd

def f(var):
    if isinstance(var, pd.DataFrame):
        print("do stuff")
  • 131
Reply Report
    • How can you generalise this to the case in which a user may use the function you define, but didn't import pandas as pd, but instead just import pandas? Just perform an or on both possibilities, or is there something more sophisticated I don't know of?
    • A potential solution could be to put the import statement inside the function so there is no chance of a user importing pandas using some other method. To speed things up (to avoid importing the entire panda library for a simple check) you could just use something like import pandas.DataFrame as panda_type and then inside then check the array type using isinstance(var, panda_type)

Trending Tags