Преобразование кадра данных с несколькими типами данных в целочисленный код данных в python с использованием панд - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть такой фрейм данных в python -

  INSTRUMENT_TYPE_CD     RISK_START_DT     ...      FIN_POS_IND PL_FINAL_IND
0     Physical Index  01-03-2017 00:00     ...                0           No
1     Fin Basis Swap  01-09-2018 00:00     ...                0           No
2     Physical Index  01-09-2017 00:00     ...                0           No
3     Physical Index  01-12-2016 00:00     ...                0           No
4     Fin Basis Swap  01-02-2018 00:00     ...                0           No

, как вы можете видеть, значения элементов в столбцах являются повторяющимися и обычно строковыми.Я хочу преобразовать этот фрейм данных в целочисленный кодированный фрейм данных, который отображает каждую уникальную строку в столбце в какое-то уникальное целое число / число.

До сих пор я придумал это (метод нормализации), но он не работает.

normalise(dataframe)

def normalise(dataframe):
    for column in dataframe:
        dataframe[column] = dataframe.apply(unique_code_mapper(dataframe[column]))
    return dataframe

def unique_code_mapper(column):
    unique_array = []
    for val in column:
        if val in unique_array:
            column.loc[val] = unique_array.index(val)
        else:
            unique_array.append(val)
            column.loc[val] = unique_array.index(val)
    return column

Возвращает следующую ошибку:

TypeError: ("'Series' object is not callable", 'occurred at index INSTRUMENT_TYPE_CD')

1 Ответ

0 голосов
/ 19 сентября 2018

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

print (df.dtypes)
INSTRUMENT_TYPE_CD            object
RISK_START_DT         datetime64[ns]
FIN_POS_IND                    int64
PL_FINAL_IND                  object
dtype: object

#select only object columns (obviously strings)
#cols = df.select_dtypes('object').columns

#select columns by names
cols = ['INSTRUMENT_TYPE_CD','PL_FINAL_IND']

for c in cols:
    df[c] = pd.factorize(df[c])[0]
print (df)
   INSTRUMENT_TYPE_CD     RISK_START_DT  FIN_POS_IND  PL_FINAL_IND
0                   0  01-03-2017 00:00            0             0
1                   1  01-09-2018 00:00            0             0
2                   0  01-09-2017 00:00            0             0
3                   0  01-12-2016 00:00            0             0
4                   1  01-02-2018 00:00            0             0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...