# How can I map True/False to 1/0 in a Pandas DataFrame?

Each Answer to this Q is separated by one/two green lines.

I have a column in python `pandas` DataFrame that has boolean `True`/`False` values, but for further calculations I need `1`/`0` representation. Is there a quick `pandas`/`numpy` way to do that?

A succinct way to convert a single column of boolean values to a column of integers 1 or 0:

``````df["somecolumn"] = df["somecolumn"].astype(int)
``````

Just multiply your Dataframe by 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` is `1` in Python, and likewise `False` is `0`*:

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

You should be able to perform any operations you want on them by just treating them as though they were numbers, as they are numbers:

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

So to answer your question, no work necessary – you already have what you are looking for.

* Note I use is as an English word, not the Python keyword `is``True` will not be the same object as any random `1`.

This question specifically mentions a single column, so the currently accepted answer works. However, it doesn’t generalize to multiple columns. For those interested in a general solution, use the following:

``````df.replace({False: 0, True: 1}, inplace=True)
``````

This works for a DataFrame that contains columns of many different types, regardless of how many are boolean.

You also can do this directly on Frames

``````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
``````

You can use a transformation for your data frame:

``````df = pd.DataFrame(my_data condition)
``````

# transforming True/False in 1/0

``````df = df*1
``````

Use `Series.view` for convert boolean to integers:

``````df["somecolumn"] = df["somecolumn"].view('i1')
``````

I had to map FAKE/REAL to 0/1 but couldn’t find proper answer.

Please find below how to map column name ‘type’ which has values FAKE/REAL to 0/1
(Note: similar can be applied to any column name and values)

``````df.loc[df['type'] == 'FAKE', 'type'] = 0
df.loc[df['type'] == 'REAL', 'type'] = 1
``````

This is a reproducible example based on some of the existing answers:

``````import pandas as pd

def bool_to_int(s: pd.Series) -> pd.Series:
"""Convert the boolean to binary representation, maintain NaN values."""
return s.replace({True: 1, False: 0})

# generate a random dataframe
df = pd.DataFrame({"a": range(10), "b": range(10, 0, -1)}).assign(
a_bool=lambda df: df["a"] > 5,
b_bool=lambda df: df["b"] % 2 == 0,
)

# select all bool columns (or specify which cols to use)
bool_cols = [c for c, d in df.dtypes.items() if d == "bool"]

# apply the new coding to a new dataframe (or can replace the existing one)
df_new = df.assign(**{c: lambda df: df[c].pipe(bool_to_int) for c in bool_cols})
``````

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .