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)
.
Ответы
Ответ 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