python - Pandas 布尔过滤顺序
问题描述
我遇到了熊猫的问题。例如,我有数据框,我想过滤它。
df = pd.DataFrame({'A': [i for i in range(5)],
'B': [i ** 2 for i in range(5)]})
df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]
但为什么会这样呢?为什么第二条语句对所有行执行?我认为 Pandas 可以使用逻辑和(运算符 &)按顺序过滤
有人可以解释一下吗?如何在一个数据帧中使用过滤器而不重新分配数据帧?
解决方案
print
返回None
等等
df[(df.A > 2) & (df.apply(lambda row: print('call'), axis=1))]
是相同的
df[(df.A > 2) & pd.Series([None]*5)]
这与
df[pd.Series([None]*5)]
所有元素都被解释为False
所以你得到空DataFrame
推荐阅读
- r - 有没有办法用闪亮的 selectInput() 选择所有子列表?
- java - Linux 服务器上的 Jenkins 文件系统 VS Jenkins EXECUTOR_NUMBER 变量
- c++ - 通过“删除”在 C++ 中重用没有内存泄漏的双数组指针会使程序崩溃
- jsf - 在子文件夹中分离 .xhtml
- java - 如何在 ECC 中生成公钥
- r - 在R中总是在一起的词
- javascript - 无法删除由 jquery 创建的表行,代码正在创建额外的不必要的列
- uima - UIMA-Ruta的注解测试环境为什么会将一些注解算为True Positive和False Positiv
- python - 通过 IP 地址进行通信
- c# - 在 PPTX 幻灯片中更新(例如文本和图像)