使用boolean时python的〜发生了什么?

时间:2019-05-10 14:26:39

标签: python pandas boolean

在pandas DataFrame中,我有一系列的布尔值。为了过滤到布尔值为True的行,我可以使用:df[df.column_x]

我认为,为了只过滤列为False的行,我可以使用:df[~df.column_x]。我觉得我以前做过,并且已经将其视为接受的答案。

但是,这失败了,因为~df.column_x将值转换为整数。见下文。

import pandas as pd . # version 0.24.2

a = pd.Series(['a', 'a', 'a', 'a', 'b', 'a', 'b', 'b', 'b', 'b'])
b = pd.Series([True, True, True, True, True, False, False, False, False, False], dtype=bool)

c = pd.DataFrame(data=[a, b]).T
c.columns = ['Classification', 'Boolean']```

print(~c.Boolean)

0    -2
1    -2
2    -2
3    -2
4    -2
5    -1
6    -1
7    -1
8    -1
9    -1
Name: Boolean, dtype: object

print(~b)

0    False
1    False
2    False
3    False
4    False
5     True
6     True
7     True
8     True
9     True
dtype: bool

基本上,我可以使用c[~b],但不能使用c[~c.Boolean]

我只是梦想着可以使用这种功能吗?

1 个答案:

答案 0 :(得分:15)

啊,由于您使用ValueError Traceback (most recent call last) <ipython-input-61-b17725dbe418> in <module> ----> 1 feature_processing.fit_transform(dftrf) ~/.conda/envs/test_py3/lib/python3.6/site-packages/sklearn/pipeline.py in fit_transform(self, X, y, **fit_params) 298 Xt, fit_params = self._fit(X, y, **fit_params) 299 if hasattr(last_step, 'fit_transform'): --> 300 return last_step.fit_transform(Xt, y, **fit_params) 301 elif last_step is None: 302 return Xt ~/.conda/envs/test_py3/lib/python3.6/site-packages/sklearn/pipeline.py in fit_transform(self, X, y, **fit_params) 799 self._update_transformer_list(transformers) 800 if any(sparse.issparse(f) for f in Xs): --> 801 Xs = sparse.hstack(Xs).tocsr() 802 else: 803 Xs = np.hstack(Xs) ~/.local/lib/python3.6/site-packages/scipy/sparse/construct.py in hstack(blocks, format, dtype) 463 464 """ --> 465 return bmat([blocks], format=format, dtype=dtype) 466 467 ~/.local/lib/python3.6/site-packages/scipy/sparse/construct.py in bmat(blocks, format, dtype) 584 exp=brow_lengths[i], 585 got=A.shape[0])) --> 586 raise ValueError(msg) 587 588 if bcol_lengths[j] == 0: ValueError: blocks[0,:] has incompatible row dimensions. Got blocks[0,1].shape[0] == 1, expected 999000. 构造函数创建了c,因此DataFrame

第一,我们来看一下T之前的情况:

T

因此pd.DataFrame([a, b]) Out[610]: 0 1 2 3 4 5 6 7 8 9 0 a a a a b a b b b b 1 True True True True True False False False False False 将使每一列 仅具有一列 pandas,否则将转换为dtype

object之后,我们每列具有哪种数据类型

您的T中的dtypes

c

c.dtypes Out[608]: Classification object Boolean object Boolean成为columns类型,这就是为什么您为object获得意外输出的原因


如何解决? --- ~c.Boolean

concat