변수가 데이터 프레임인지 확인


130

내 함수 f가 변수로 호출 될 때 var가 pandas 데이터 프레임인지 확인하고 싶습니다.

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

해결책은 매우 간단 할 수 있지만

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

예상대로 작동하지 않습니다.


1
코드에 "if varis equal to an empty dataframe"이 표시됩니다. 정말로 원하는 것은 "유형이 유형과 var동일한 경우 pd.DataFrame"입니다. 당신은 그것을 사용하여 확인할 수 있습니다isinstance
Katriel

답변:


180

isinstance다른 것은 사용 하지 마십시오.

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

PEP8isinstance유형을 확인하는 데 선호되는 방법 이라고 명시 적으로 말합니다.

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

그리고 생각조차 하지마

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

isinstance상속을 처리합니다 ( type ()과 isinstance ()의 차이점무엇입니까? 참조 ). 변수가 문자열 (중 하나 인 경우 예를 들어, 당신을 말할 것이다 strunicode)가에서 파생 때문에 basestring)

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

특히 pandas DataFrame개체의 경우 :

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

131

내장 isinstance()기능을 사용하십시오 .

import pandas as pd

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

3
어떻게 사용자가 정의한 기능을 사용할 수있는 경우이 일반화하지만하지 않았다 수 import pandas as pd대신,하지만 import pandas? or두 가지 가능성 모두에 대해 수행하십시오 . 아니면 내가 모르는 더 정교한 것이 있습니까?
n1k31t4

1
잠재적 인 해결책은 사용자가 다른 방법을 사용하여 pandas를 가져올 기회가 없도록 함수 안에 import 문을 넣는 것입니다. 속도를 높이려면 (간단한 확인을 위해 전체 panda 라이브러리를 가져 오는 것을 피하기 위해) import pandas.DataFrame as panda_type다음 과 같은 것을 사용한 다음 내부에서 다음을 사용하여 배열 유형을 확인할 수 있습니다.isinstance(var, panda_type)
pacificgilly1992
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.