使用 Pandas 的“where”方法时,“AttributeError:‘float’对象没有属性‘all’”
Posted
技术标签:
【中文标题】使用 Pandas 的“where”方法时,“AttributeError:‘float’对象没有属性‘all’”【英文标题】:"AttributeError: 'float' object has no attribute 'all'" when using "where" method from Pandas 【发布时间】:2015-01-14 10:20:03 【问题描述】:我正在尝试使用 Pandas 的 where
方法,但我遇到了一个错误。这是一个非常小的例子。
给文件
Chamber,Treatment
1,Sem palha
1,Sem palha
1,Sem palha
2,Sem palha
2,Sem palha
当我跑步时
import pandas
sample = pandas.read_csv('sample.csv')
sample.where(sample['Chamber'] == 1)
我明白了
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-62-96ed02cb41da> in <module>()
----> 1 sample.where(sample['Chamber'] == 1)
/usr/lib/python3.4/site-packages/pandas/core/generic.py in where(self, cond, other, inplace, axis, level, try_cast, raise_on_error)
3346 new_data = self._data.where(other=other, cond=cond, align=axis is None,
3347 raise_on_error=raise_on_error,
-> 3348 try_cast=try_cast)
3349
3350 return self._constructor(new_data).__finalize__(self)
/usr/lib/python3.4/site-packages/pandas/core/internals.py in where(self, **kwargs)
2434
2435 def where(self, **kwargs):
-> 2436 return self.apply('where', **kwargs)
2437
2438 def eval(self, **kwargs):
/usr/lib/python3.4/site-packages/pandas/core/internals.py in apply(self, f, axes, filter, do_integrity_check, **kwargs)
2416 copy=align_copy)
2417
-> 2418 applied = getattr(b, f)(**kwargs)
2419
2420 if isinstance(applied, list):
/usr/lib/python3.4/site-packages/pandas/core/internals.py in where(self, other, cond, align, raise_on_error, try_cast)
1043 axis = cond.ndim - 1
1044 cond = cond.swapaxes(axis, 0)
-> 1045 mask = np.array([cond[i].all() for i in range(cond.shape[0])],
1046 dtype=bool)
1047
/usr/lib/python3.4/site-packages/pandas/core/internals.py in <listcomp>(.0)
1043 axis = cond.ndim - 1
1044 cond = cond.swapaxes(axis, 0)
-> 1045 mask = np.array([cond[i].all() for i in range(cond.shape[0])],
1046 dtype=bool)
1047
AttributeError: 'float' object has no attribute 'all'
【问题讨论】:
sample.where
需要一个与sample
形状相同的布尔数组或 NDFrame。期望的结果是什么?例如,你想要sample['Chamber'].where(sample['Chamber'] == 1)
吗?
【参考方案1】:
您的语法实际上可以在新版本的 pandas 中使用。您可以使用
在 Ubuntu 上升级 pandassudo pip install --upgrade pandas
或者如果你使用的是python3,那么
sudo pip3 install --upgrade pandas
【讨论】:
【参考方案2】:正如 unutbu 在评论中指出的那样,where
似乎是一个“单元格”选择。这些变体按预期工作:
sample[sample["Chamber"] == 1]
和
sample.query("Chamber == 1")
【讨论】:
以上是关于使用 Pandas 的“where”方法时,“AttributeError:‘float’对象没有属性‘all’”的主要内容,如果未能解决你的问题,请参考以下文章
在 Pandas 中使用 .loc 和 MultiIndex
如何在 python/pandas 中使用 where 条件转换 sql 计数?
pandas新字段(数据列)生成使用np.where或者apply lambda函数结合if else生成新的字段,详解及实战