Создать список столбцов со значениями "yes" или "no" из датафрейма pandas

Мне надо заменить все значения yes/no на 1/0 в датафрейме pandas как это сделать я знаю, но вот для начала я хотел бы создать список из этих столбцов, но никак идеи в голову не приходят


Ответы (2 шт):

Автор решения: CrazyElf

Как-то так. Eсли у вас строковые только эти колонки, то дополнительная проверка с any не нужна, тем более я её явно не оптимально как-то написал.

import pandas as pd

df = pd.DataFrame({'int': [1, 2, 3], 'obj1': ['yes', 'no', 'yes'], 'obj2': ['no', 'yes', 'no'], 'obj3': ['n', 'y', 'n']})

obj_columns = df.columns[df.dtypes == 'object'].to_list()
for col in obj_columns:
    if any(df[col].str.contains(x).any() for x in ('yes','no')):
        df[col] = df[col].map({'yes': 1, 'no': 0})

На выходе:

  int obj1  obj2 obj3
0   1    1     0    n
1   2    0     1    y
2   3    1     0    n
→ Ссылка
Автор решения: MaxU

Можно сначала получить список строковых столбцов, а после заменить во всех строковых столбцах yes -> 1, no -> 0:

cols = df.columns[df.dtypes.eq("object")]
df.loc[:, cols] = df[cols].replace({'yes': 1, 'no': 0})

результат:

In [8]: df
Out[8]:
   int  obj1  obj2 obj3
0    1     1     0    n
1    2     0     1    y
2    3     1     0    n

PS пример данных я позаимствовал из ответа уважаемого @CrazyElf :)

→ Ссылка