在我的代码中,有几个变量可以包含pandas数据框,也可以不包含任何内容。假设我想测试某个数据帧是否已经创建。我的第一个想法是这样测试:
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
哎哟。除了速度慢之外,非类型的测试也不是很灵活。
另一种解决方案是将df1
初始化为空数据帧,以便在空和非空情况下类型都相同。然后我就可以使用len()
,或者any()
,或者类似的东西进行测试。不过,创建一个空数据帧似乎有点愚蠢和浪费。
另一个解决方案是有一个指示符变量:df1_exists
,在创建df1
之前,该变量设置为False。然后,不是测试df1
,而是测试df1_exists
。但这也不是那么优雅。
有没有更好的,更像Python的方法来处理这个问题?是我遗漏了什么,还是这只是熊猫可怕的副作用?
python表示“nothing”的方式是via
None
,用于通过我不知道现在有多关键,但既然你衡量了事情:
因此,检查某个
is not None
也比isinstance
替代方案快。选项1(我的首选选项)
我是@Ami Tavory's
如果您喜欢这种方法,请选择他的答案
用
None
初始化一个变量,然后在对该变量执行操作之前检查None
,这是非常习惯的python。选项2
然而,设置一个空数据帧并不是一个坏主意。
选项3
试试看。
计时
当
df1
处于初始化状态或根本不存在时当
df1
是一个数据帧,其中包含一些内容时相关问题 更多 >
编程相关推荐