перевірте, чи змінною є фрейм даних


130

коли моя функція f викликається змінною, я хочу перевірити, чи var є файлом даних панди:

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

Я думаю, що рішення може бути досить простим, але навіть з

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

Я не можу змусити його працювати так, як очікувалося.


1
У вашому коді написано "якщо varдорівнює порожній кадр даних". Те, що ви дійсно хочете, - це "якщо тип varдорівнює типу pd.DataFrame". Ви можете перевірити це, використовуючиisinstance
Катріель

Відповіді:


180

Використовуйте isinstance, нічого іншого:

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

PEP8 прямо говорить, що isinstanceце кращий спосіб перевірки типів

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обробляє спадщину (див. Які відмінності між типом () та речовиною ()? ). Наприклад, він підкаже, чи є змінною рядок (або strабо unicode), оскільки вони походять від 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
Потенційним рішенням може бути встановлення оператора імпорту всередині функції, щоб не було шансів користувач імпортувати панди, використовуючи якийсь інший метод. Щоб прискорити роботу (щоб не імпортувати всю бібліотеку панд для простої перевірки), ви можете просто скористатися чимось на зразок, import pandas.DataFrame as panda_typeа потім всередині, а потім перевірити тип масиву, використовуючиisinstance(var, panda_type)
pacificgilly1992
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.