У меня есть столбец в Python pandas DataFrame, который имеет логические значения True / False, но для дальнейших вычислений мне нужно представление 1/0. Есть ли быстрый способ сделать это с помощью pandas / numpy?
У меня есть столбец в Python pandas DataFrame, который имеет логические значения True / False, но для дальнейших вычислений мне нужно представление 1/0. Есть ли быстрый способ сделать это с помощью pandas / numpy?
Ответы:
Краткий способ преобразования одного столбца логических значений в столбец целых чисел 1 или 0:
df["somecolumn"] = df["somecolumn"].astype(int)
somecolumn
. Используя astype(int)
то потерпит неудачу. Другой подход, который преобразуется True
в 1,0 и False
0,0 (с плавающей точкой) при сохранении значений NaN, заключается в следующем:df.somecolumn = df.somecolumn.replace({True: 1, False: 0})
astype(float)
и получить тот же результат?
Просто умножьте свой 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
True
находится 1
в Python, а также False
является 0
* :
>>> True == 1
True
>>> False == 0
True
Вы должны быть в состоянии выполнять любые операции , которые вы хотите на них, просто рассматривая их , как если бы они были числами, так как они являются номерами:
>>> issubclass(bool, int)
True
>>> True * 5
5
Итак, чтобы ответить на ваш вопрос, никакой работы не требуется - у вас уже есть то, что вы ищете.
* Обратите внимание, что я использую это как английское слово, а не ключевое слово Python is
- True
это не тот же объект, что и любой случайный 1
.
np.sin(True).dtype
для меня это float16.
df.my_column.mean()
нормально звонить (как вы подразумеваете), но когда я пытаюсь: df.groupby("some_other_column").agg({"my_column":"mean"})
я получаю DataError: No numeric types to aggregate
, поэтому кажется, что они НЕ всегда одинаковы. Просто к вашему сведению.
bool
столбцы.
TypeError: numpy boolean subtract, the
оператор -` устарел, используйте вместо него bitwise_xor, ^
оператор или функцию logic_xor. `Использование ответа @ User исправляет это.
bool
столбцов, как для int
столбцов
Вы также можете сделать это прямо во фреймах
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
Вы можете использовать преобразование для своего фрейма данных:
df = pd.DataFrame(my_data condition)
df = df*1
Используйте Series.view
для преобразования логических значений в целые числа:
df["somecolumn"] = df["somecolumn"].view('i1')