在我的代码中,我有几个变量可以包含pandas DataFrame或根本没有内容。假设我想测试并查看是否已经创建了某个DataFrame。我的第一个想法是像这样进行测试:
if df1:
# do something
然而,这段代码会以以下方式失败:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
好的。理想情况下,我希望有一个存在性测试,可以适用于DataFrame或Python None。
以下是一种实现方式:
if not isinstance(df1, type(None)):
# do something
然而,类型检测非常缓慢。
t = timeit.Timer('if None: pass')
t.timeit()
# approximately 0.04
t = timeit.Timer('if isinstance(x, type(None)): pass', setup='x=None')
t.timeit()
# approximately 0.4
哎呀,除了慢之外,测试NoneType也不是很灵活。
另一种解决方案是将df1
初始化为空DataFrame,以便在空值和非空值情况下类型相同。然后我可以使用len()
或any()
等方法进行测试。不过,创建一个空的DataFrame似乎有点愚蠢和浪费。
另一种解决方案是使用指示变量:df1_exists
,直到创建df1
为止将其设置为False。然后,我将测试df1_exists
而不是df1
。但这似乎也不是很优雅。
是否有更好、更符合Python风格的处理方式?我有什么遗漏吗,还是这只是Pandas所有强大功能中的一种笨拙的副作用?