Как преобразовать истинные ложные значения в 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
Как преобразовать истинные ложные значения в 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
Во-первых, если у вас есть строки '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)
Просто так:
df[["col2", "col4"]] *= 1
Python рассматривает логические значения (True, False) как (1, 0) соответственно. Таким образом, вы можете работать с ним, как номера.
Вы можете преобразовать тип каждого столбца, как
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)
работает для преобразования.
Предположим, что d
- это кадр данных, который вы хотите преобразовать
f = lambda x: 1 if x==True else 0
d.applymap(f)
должно быть тем, что вы хотите.
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
Вы также можете попробовать это преобразовать логические значения, например 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
Вы можете преобразовать значения "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
Этот метод может использоваться для сравнения любого значения или строки и замены этого места на требуемое значение или строку.
Если у вас есть категорический столбец в ваших данных (например, название страны) .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
Это не работает:
df['COL2'] = (df['COL2'] == 'TRUE').astype(int)
Это работает:
df['COL2'] = (df['COL2'] == True ).astype(int)