Как преобразовать истинные ложные значения в dataframe как 1 для true и 0 для false

Как преобразовать истинные ложные значения в Dataframe как 1 для true и 0 для false

COL1  COL2 COL3  COL4
12   TRUE  14    FALSE
13   FALSE  13    TRUE


OUTPUT
12   1  14 0
13   0  13 1

Ответ 1

Во-первых, если у вас есть строки 'TRUE' и 'FALSE', вы можете преобразовать их в логические значения True и False например:

df['COL2'] == 'TRUE'

Это дает вам столбец bool. Вы можете использовать astype для преобразования в int (потому что bool является интегральным типом, где True означает 1 и False означает 0, что именно то, что вы хотите):

(df['COL2'] == 'TRUE').astype(int)

Чтобы заменить старый столбец строки на этот новый столбец int, просто назначьте его:

df['COL2'] = (df['COL2'] == 'TRUE').astype(int)

И чтобы сделать это с двумя столбцами на одном, просто индексируйте со списком столбцов:

df[['COL2', 'COL4']] = (df[['COL2', 'COL4']] == 'TRUE').astype(int)

Ответ 2

Просто так:

df[["col2", "col4"]] *= 1

Python рассматривает логические значения (True, False) как (1, 0) соответственно. Таким образом, вы можете работать с ним, как номера.

Ответ 3

Вы можете преобразовать тип каждого столбца, как

In [7]: df[['COL2', 'COL4']] = df[['COL2', 'COL4']].astype(int)

In [8]: df
Out[8]:
   COL1  COL2  COL3  COL4
0    12     1    14     0
1    13     0    13     1

Даже df[['COL2', 'COL4']].astype(float) работает для преобразования.

Ответ 4

Предположим, что d - это кадр данных, который вы хотите преобразовать

f = lambda x: 1 if x==True else 0

d.applymap(f) должно быть тем, что вы хотите.

Ответ 5

df=pd.DataFrame(data={'col1' : [True, False, True],
                 'col2': [14, 15, 12],
                 'col3': [False, True, True]})
df[['col1', 'col3']]=df[['col1', 'col3']].astype('int')
df
Output:
    col1    col2    col3
0   1        14      0
1   0        15      1
2   1        12      1

Ответ 6

Вы также можете попробовать это преобразовать логические значения, например True или False, в 1 или 0.

    In [2] : df['attribute_name']
    Out[2] : 0 True
             1 False
             2 True
             3 True

Теперь импортируйте эти пакеты:

    In [3] : from sklearn import preprocessing
             lab_enc = preprocessing.LabelEncoder()
             lab_enc.fit(df['attribute_name'])
             variable = lab_enc.transform(df['attribute_name'])
             df['variable'] = variable
             print df['variable']
    Out[4] : 0 1
             1 0
             2 1
             3 1

Если вы хотите вернуть значения от 0 или 1 до False или True, вы можете использовать lab_encoder.inverse_transform ([0,1]), который выводит результат от 0 или 1 до False или True

Ответ 7

Вы можете преобразовать значения "True" и "False" (строки) в 1 и 0 соответственно для определенного столбца (здесь мы выбираем третий столбец) следующим образом.

from pandas import DataFrame as df
data = df(data) # where data contains your data as rows and columns
                # and it is converted to dataframe using pandas (ignore if already df)
for i in range(len(data[3])):
    if data[3][i] == 'TRUE':
        data[3][i] = 1
    elif data[3][i] == 'FALSE':
        data[3][i] = 0
    else:
        pass

Этот метод может использоваться для сравнения любого значения или строки и замены этого места на требуемое значение или строку.

Ответ 8

Если у вас есть категорический столбец в ваших данных (например, название страны) .astype(int) вернет ошибку. Лучше выбрать умножение ваших данных на один

data = pd.read_csv('data.txt', header = None) 
data *= 1 # make true/false -> 1/0
print(data)

так что если у вас есть

True False USA
False False USA
True True russia

результат будет

1 0 USA
0 0 USA
1 1 USA

Ответ 9

Это не работает:

df['COL2'] = (df['COL2'] == 'TRUE').astype(int)

Это работает:

df['COL2'] = (df['COL2'] == True ).astype(int)