откуда взялась эта скобка?

Я новичок из панд и нахожусь на стадии фундаментальной.

Я попытался закодировать некоторые данные и поместить те же столбцы в data_enc.

from sklearn.preprocessing import LabelEncoder


labelencoder = LabelEncoder()
new_data = data[['HeatingQC']][:35].copy()

data_enc = pd.DataFrame(labelencoder.fit_transform(new_data),
                        columns = [new_data.columns + '_enc'],
                        index = new_data.index)
print(data_enc.columns[0])
print(new_data.columns[0])

Но тогда выход неожиданный. то есть

('HeatingQC_enc',) 
HeatingQC

У меня вопрос, откуда взялись круглые скобки и как их убрать?

3 ответа

Проблема в том, как вы создали columnsиз data_enc. Вы прошлиlist который содержит Indexобъект. Из-за этого вложения панды решили создать неработающий MultiIndex. (Он не работает, потому что это MultiIndex только с одним уровнем, поэтому его действительно не должно быть)

Пример:

df = pd.DataFrame(columns=list('abc'))

# Placing the Index in a list incorrectly leads to a MultiIndex
pd.DataFrame(columns=[df.columns+'_suffix']).columns
#MultiIndex([('a_suffix',),
#            ('b_suffix',),
#            ('c_suffix',)],)

# Instead get rid of the list, just add the suffix:
pd.DataFrame(columns=df.columns+'_suffix').columns
#Index(['a_suffix', 'b_suffix', 'c_suffix'], dtype='object')

Как насчет new_data = data['HeatingQC'][:35].copy()вместо индексации фрейма данных списком? Таким образом, вы должны получить одну серию.

Скобки здесь, потому что ваш код вернул кортеж. Чтобы избавиться от них, выполните:

print(data_enc.columns[0][0])Вместо того:print(data_enc.columns[0])

Другие вопросы по тегам