откуда взялась эта скобка? - PullRequest
1 голос
/ 17 апреля 2020

Я новичок ie из pandas, и я нахожусь в стадии фундаментального.

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

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 ]

1 голос
/ 17 апреля 2020

Проблема в том, как вы создали columns data_en c. Вы передали list, который содержит Index объект. Из-за этой вложенности pandas решил создать сломанный 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')
0 голосов
/ 17 апреля 2020

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

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

0 голосов
/ 17 апреля 2020

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

...