由于python语言的简洁性,在判断一个容器是否为空的时候,比如列表,可以直接用if + 要判断的东西:

a = list()
if a:print('不为空')
else:print('列表为空')

如果是空会返回false,在有值的时候会返回true。

这是因为列表加在 if 后面构成判断语句时,python是能判断要做什么,针对空列表,以及列表本身为none都hi返回false。

而如果是dataframe的话,就会报错了:

def get_df(df=None):res = df if df else pd.DataFrame() print(res)get_df(df)

看到这个报错有点蒙,分析下,我这里是把df作为一个参数传进来,而我想要的逻辑是如果df传入就采用传入的值,没有传的话就新建(这里只是为了说明问题)。但是这样写会报错,从报错信息来看,也就是python认为它不清楚我想要让它判断什么,它不清楚什么是我想要的真,什么是假。

根据它的提示,如果我要判断这个数据框是否是一个空的数据框,我应该用empty,判断布尔值,应该用bool。。。等等。所以这里应该明确告诉python我的意图,我只是想知道有没有这个参数。所以进行以下改造:

def get_df(df=None):res = df if df is not None else pd.DataFrame()print(res)get_df(df)

明确指定要判断的事情就可以了。从这里我也发现,数据框和传统的容器是有一些不同的,套用传统的操作时,还是要多加注意。


后续研究结果:

python的if是在调用内置方法 __bool__(),并且优先使用它,如果没有布尔方法则去找 __len__()方法。

举个例子:

自定义一个类,定义__bool__方法和__len__方法。

实例化该类,并直接进行 if 判断该实例,它调用的实际是bool方法,结果为bool方法的返回值,false。

注释掉 bool 方法,可以看到它调用的是 len 方法,len 返回为1,只有0 为false,其他都是true,所以返回true。

由此可以得知,如果想让 if 逻辑判断自己定义的逻辑,需要定义bool方法,某种情况下 len也可以。

上述报错是因为dataframe继承自ndframe,而ndframe重写了__bool__()方法,将其指向为自定义方法:

__nonzero__()。
__bool__ = __nonzero__

在这个自定义方法里,什么都没有做,只是抛了一个异常:

    def __nonzero__(self):raise ValueError("The truth value of a {0} is ambiguous. ""Use a.empty, a.bool(), a.item(), a.any() or a.all().".format(self.__class__.__name__))

目的,应该是为了避免直接使用 if df的写法。

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty 解决办法。(附 if 深层理解)相关推荐

  1. 成功解决ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any(

    成功解决ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any( ...

  2. ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a. ...

  3. 成功解决ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() o

    成功解决ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() o ...

  4. 【python】The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all

    在pandas用Dataframe中的某个值进行if逻辑判断时,进行以下代码书写: if max_data.user_id != 'ALL':print(max_data['user_id']) Va ...

  5. ValueError: invalid literal for int() with base 10:Python报错及其解决办法

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 报错情况 Valu ...

  6. 将npz文件转化为txt文件中出现错误(ValueError: Expected 1D or 2D array, got 3D array instead)的解决办法

    seq.npz直接使用Notepad++打开发生错误,试着使用python去读这个文件包. import numpy as np# %% seq_data = np.load('seq.npz') p ...

  7. Python解决The truth value of a Series is ambiguous.md

    Python解决The truth value of a Series is ambiguous.md import pandas as pd data = pd.read_csv('x.csv') ...

  8. 成功解决ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or

    成功解决ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or ...

  9. python报错:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any(

    在判断多元素数组是否为空时,报了这个错 if a: # a是含有多个元素的numpy数组xxx python报错: ValueError: The truth value of an array wi ...

最新文章

  1. 芝麻翻译软件测试,细数35个单元测试准则 “Hello, world!”
  2. 2019ICCV论文 Non-Local ConvLSTM for Video Compression Artifact Reductio
  3. 图解用NetCat连接远程端口
  4. 笔记本电脑性价比排行2019_办公笔记本电脑排名2019 五款适合办公的笔记本电脑推荐...
  5. php实现下单成功提示语,推荐10款提示语源码(收藏)汇总
  6. Apache与Nginx实现Web页面动静分离(产生的原因,应用场景)
  7. ruby 嵌套函数_Ruby嵌套有示例的循环
  8. JAVA 最新 环境搭建(JDK 1.8 + Tomcat 9 + eclipse oxygen + mysql 5.7)
  9. JAVA画SVG图(Batik框架)SVGComponentDemo
  10. configure: error: udev support requested but libudev header not installed
  11. 七月算法机器学习4 凸优化初步
  12. React 中setState更新state何时同步何时异步?
  13. U盘、移动硬盘不格式化制作启动盘
  14. 计算机科学的方法论有三个过程,计算机科学与技方法论3.ppt
  15. AI发票扫描识别sdk软件接口
  16. Ubuntu Tty (字符终端) 显示中文,和字体大小设置
  17. 在前端layui项目中使用ztree
  18. 托管网站需要知道的网站优化指标有哪些
  19. 第十一届蓝桥杯第三场软件类省赛 C++ B组 题解
  20. 冈萨雷斯《数字图像处理》学习笔记(八)图像压缩

热门文章

  1. Wrong committed revision number: -1
  2. 数据分析入门之好莱坞百万级评论数据分析
  3. Epic games 一直卡在 在我们启动更新时请稍后的解决方法
  4. 店铺管理系统项目总结
  5. 必应词典win10问题
  6. Tone Mapping(色调映射) 认识
  7. preempt rt对pagefault的处理
  8. 图片翻译成中文怎么弄?分享三个图片翻译小技巧
  9. GOF设计模式之单例模式
  10. 从职校到前端培训班经历(二)