isinstance()是Python中的一个内置函数,用来判断一个对象的变量类型(判断数据是不是指定的类型)
语法
isinstance(object, classinfo)
参数
object : 实例对象
classinfo: 可以是直接或间接类名、基本类型或者由它们组成的元组
对于基本类型来说, classinfo 可以是: int,float,bool,complex,str(字符串),list,dict(字典),set,tuple(元组)
注意: classinfo 的字符串是 str 而不是 string,字典也是简写 dict
返回值
如果对象的类型与参数二的类型(classinfo)相同则返回True,否则返回False
实例
a = 2
print(isinstance(a,int)) # True
print(isinstance(a,str)) # False
# 报错
print(isinstance(a,string)) # NameError: name 'string' is not defined
print(isinstance(1,int)) # True
print(isinstance(1.0,float)) # True
print(isinstance(True,bool)) # True
print(isinstance(False,bool)) # True
print(isinstance({'Price':123},dict)) # True
print(isinstance([1,2,3],list)) # True
print(isinstance(set([1,2,3,3]),set)) # True
print(isinstance((1,2,3),tuple)) # True
# classinfo是元组
print(isinstance(a,(str,int,list))) # 是元组中的一个,返回True
# classinfo是类名
class Myclass:
pass
# test是Myclass的实例
test = Myclass()
print(isinstance(test, Myclass)) # True
isinstance()与type()的区别
type()不会认为子类是一种父类类型,不考虑继承关系
isinstance()会认为子类是一种父类类型,考虑继承关系
如果要判断两个类型是否相同推荐使用isinstance()
class A:
pass
class B(A):
pass
isinstance(A(),A) # True
type(A()) == A # True
isinstance(B(),A) # True
type(B()) == A # False
扩展案例
import pandas as pd
df = pd.DataFrame([[1,2,None,0,None]],
columns=['Monday','Tuesday','Wednesday','Thursday','Friday'])
#--------------------------------------------
df:
Monday Tuesday Wednesday Thursday Friday
0 1 2 None 0 None
---------------------------------------------
def fn(row):
l = [i for i in [row['Monday'],row['Tuesday'],row['Wednesday'],
row['Thursday'],row['Friday']] if isinstance(i,int)]
return l
# res返回结果:[1, 2, 0]
# 即每行非None的列值(不包括index列)
# 因为只有一行的数据,所以是该行'Monday','Tuesday','Thursday'三列的数值
res = df.apply(lambda row:fn(row), axis = 1)