kiểm tra xem biến là dataframe


129

Khi hàm f của tôi được gọi với một biến tôi muốn kiểm tra xem var có phải là khung dữ liệu của gấu trúc không:

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

Tôi đoán giải pháp có thể khá đơn giản nhưng ngay cả với

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

Tôi không thể làm cho nó hoạt động như mong đợi.


1
Mã của bạn nói "nếu varbằng với một khung dữ liệu trống". Điều bạn thực sự muốn là "nếu loại varbằng với loại pd.DataFrame". Bạn có thể kiểm tra bằng cách sử dụngisinstance
Katriel

Câu trả lời:


179

Sử dụng isinstance, không có gì khác:

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

PEP8 nói rõ ràng đó isinstancelà cách ưa thích để kiểm tra các loại

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

Và thậm chí không nghĩ về

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

isinstancexử lý kế thừa (xem Sự khác biệt giữa loại () và isinstance () là gì? ). Ví dụ, nó sẽ cho bạn biết nếu một biến là một chuỗi (hoặc strhoặc unicode), bởi vì chúng xuất phát từ basestring)

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

Cụ thể cho pandas DataFramecác đối tượng:

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

131

Sử dụng isinstance()chức năng tích hợp.

import pandas as pd

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

3
Làm thế nào bạn có thể khái quát điều này cho trường hợp người dùng có thể sử dụng chức năng bạn xác định, nhưng không import pandas as pd, nhưng thay vào đó chỉ là import pandas? Chỉ cần thực hiện một ortrong cả hai khả năng, hoặc có điều gì tinh vi hơn mà tôi không biết?
n1k31t4

1
Một giải pháp tiềm năng có thể là đưa câu lệnh nhập vào bên trong hàm để không có cơ hội người dùng nhập gấu trúc bằng một số phương pháp khác. Để tăng tốc mọi thứ (để tránh nhập toàn bộ thư viện gấu trúc để kiểm tra đơn giản), bạn có thể chỉ cần sử dụng một cái gì đó như thế import pandas.DataFrame as panda_typevà sau đó kiểm tra loại mảng bằng cách sử dụngisinstance(var, panda_type)
pacificgilly1992
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.