Подтвердить что ты не робот

Python pandas/numpy Отображение True/False to 1/0

У меня есть столбец в python pandas DataFrame, который имеет логические значения True/False, но для дальнейших вычислений мне нужно 1/0. Есть ли быстрый способ pandas/numpy сделать это?

EDIT: Ниже приведенные ниже ответы не сохраняются в случае numpy, который, учитывая массив с целыми числами и значениями True/False, возвращает dtype=object в таком массиве. Чтобы продолжить вычисления в numpy, мне пришлось явно указать np_values = np.array(df.values, dtype = np.float64).

4b9b3361

Ответ 1

True является 1 в Python, а также False является 0 *:

>>> True == 1
True
>>> False == 0
True

Вы должны иметь возможность выполнять любые операции, которые вы хотите на них, просто рассматривая их так, как если бы они были числами, поскольку они являются числами:

>>> issubclass(bool, int)
True
>>> True * 5
5

Итак, чтобы ответить на ваш вопрос, никакой работы не требуется - у вас уже есть то, что вы ищете.

* Примечание. Я использую это как английское слово, а не ключевое слово Python is - True не будет тем же объектом, что и любой случайный 1.

Ответ 2

Просто для явного ответа на вопрос о том, как преобразовать один столбец логических значений в столбец целых чисел 1 или 0:

df.somecolumn = df.somecolumn.astype(int)

Ответ 3

Вы также можете сделать это непосредственно на фреймах

In [104]: df = DataFrame(dict(A = True, B = False),index=range(3))

In [105]: df
Out[105]: 
      A      B
0  True  False
1  True  False
2  True  False

In [106]: df.dtypes
Out[106]: 
A    bool
B    bool
dtype: object

In [107]: df.astype(int)
Out[107]: 
   A  B
0  1  0
1  1  0
2  1  0

In [108]: df.astype(int).dtypes
Out[108]: 
A    int64
B    int64
dtype: object

Ответ 4

Просто умножьте свой Dataframe на 1 (int)

[1]: data = pd.DataFrame([[True, False, True], [False, False, True]])
[2]: print data
          0      1     2
     0   True  False  True
     1   False False  True

[3]: print data*1
         0  1  2
     0   1  0  1
     1   0  0  1