Очистка данных с помощью Pandas в Python - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь очистить CSV-файл для анализа данных. Как конвертировать TRUE FALSE в 1 и 0?

Когда я ищу в Google, они предлагают df.somecolumn=df.somecolumn.astype(int). Однако этот CSV-файл содержит 100 столбцов, и не каждый столбец имеет значение true false (некоторые являются категориальными, некоторые являются числовыми). Как сделать быстрый код, который позволяет нам преобразовать любой столбец с TRUE FALSE в 1 и 0 без ввода 50 строк df.somecolumn=df.somecolumn.astype(int)

Ответы [ 3 ]

4 голосов
/ 16 октября 2019

вы можете использовать:

df.select_dtypes(include='bool')=df.select_dtypes(include='bool').astype(int)

0 голосов
/ 16 октября 2019

Я бы сделал это так:

df.somecolumn = df.somecolumn.apply(lambda x: 1 if x=="TRUE" else 0)

Если вы хотите перебрать все ваши столбцы и проверить, имеют ли они значения ИСТИНА / ЛОЖЬ, вы можете сделать это:

for c in df:
    if 'TRUE' in df[c] or 'FALSE' in df[c]:
        df[c] = df[c].apply(lambda x: 1 if x=='TRUE' else 0)

Обратите внимание, что этот подход учитывает регистр и не сработает, если в столбце значения TRUE / FALSE смешаны с другими.

0 голосов
/ 16 октября 2019

Немного другой подход. Во-первых, dtypes фрейма данных можно вернуть с помощью df.dtypes, что дает ряд панд, который выглядит следующим образом:

a     int64
b      bool
c    object
dtype: object

Во-вторых, мы могли бы заменить bool на тип int, используя replace,

df.dtypes.replace('bool', 'int8'), это дает

a     int64
b     int8
c    object
dtype: object

Наконец, pandas seires - это, по сути, словарь, который может быть передан в pd.DataFrame.astype.

Мы могли бы написать это в виде единого документа,

df.astype(df.dtypes.replace('bool', 'int8'))
...