Преобразование true / false в 0/1 логическое значение в смешанном кадре данных - PullRequest
1 голос
/ 20 мая 2019

У меня есть фрейм данных со смешанными типами данных.Я хочу создать функцию, которая проходит через все столбцы и преобразует все столбцы, содержащие True/False в int32 тип 0/1.Я попробовал лямбда-функцию ниже, где d - мой фрейм данных:

f = lambda x: 1 if x==True else 0
d.applymap(f)

Это не работает, оно также преобразует все мои не булевы столбцы в 0/1.Есть ли хороший способ пройти через фрейм данных и оставить все без изменений, кроме логических столбцов, и преобразовать их в 0 и 1?Любая помощь приветствуется!

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

Вы можете выбрать столбцы, используя loc, и изменить тип данных.

df = pd.DataFrame({'col1':np.random.randn(2), 'col2':[True, False], 'col3':[False, True]})

df.loc[:, df.dtypes == bool] = df.astype(int)



    col1      col2  col3
0   0.999358    1   0
1   0.795179    0   1
2 голосов
/ 20 мая 2019

Давайте изменим вашу лямбду, чтобы использовать isinstance проверку:

df.applymap(lambda x: int(x) if isinstance(x, bool) else x)

Только значения типа bool будут преобразованы в int, все остальное остается прежним.


В качестве лучшего решения, если типы столбцов являются скалярными (а не «смешанными», как я изначально предполагал с учетом вашего вопроса), вы можете вместо этого использовать

u = df.select_dtypes(bool)
df[u.columns] = u.astype(int)
0 голосов
/ 20 мая 2019

Если у вас есть датафрейм df, попробуйте:

df_1=df.applymap(lambda x: int(x) if type(x)==bool else x)
...