Преобразование кадра данных с несколькими типами данных в целочисленный код данных в python с использованием панд

1

У меня есть dataframe, как это в 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')
Теги:
pandas
dataframe

1 ответ

1
Лучший ответ

Вы можете использовать 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
  • 0
    Благодарю. это сработало! :)
  • 0
    @Shan - Конечно, лучший тест это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню