Почему я не могу объединить столбцы вместе

#pandas #dataframe #numpy

#pandas #фрейм данных #numpy

Вопрос:

Моя цель — преобразовать массив в DataFrame, и ошибка произошла только в столбцах = …

 housing_extra = pd.DataFrame(housing_extra_attribs,
                index=housing_num.index,
                columns=[housing.columns,'rooms_per_household', 'population_per_household', 'bedrooms_per_room'])
 

Следовательно, он возвращает

 AssertionError: Number of manager items must equal union of block items
# manager items: 4, # tot_items: 12

 

В нем говорилось, что я только вводил 4 столбца, но housing.columns сам по себе имеет 9 столбцов

здесь, когда я запускаю housing.columns ;

 Index(['longitude', 'latitude', 'housing_median_age', 'total_rooms',
      'total_bedrooms', 'population', 'households', 'median_income',
      'ocean_proximity'],
     dtype='object')
 

Итак, мой вопрос в том, как я могу объединить существующий столбец, который находится housing.columns с 3 новыми столбцами; ['rooms_per_household', 'population_per_household', 'bedrooms_per_room'] вместе.

Ответ №1:

Вы можете использовать Index.union для добавления списка столбцов к существующим столбцам фрейма данных:

 columns= housing.columns.union(
['rooms_per_household', 'population_per_household', 'bedrooms_per_room'],
sort=False)
 

Или преобразовать в список, а затем добавить остальные столбцы в виде списка:

 columns = (housing.columns.tolist()   
 ['rooms_per_household', 'population_per_household', 'bedrooms_per_room'])
 

Затем:

 housing_extra = pd.DataFrame(housing_extra_attribs,
                index=housing_num.index,
                columns=columns)
 

Какой-нибудь пример:
Предположим, что это df:

 df = pd.util.testing.makeDataFrame()
print(df.columns)
#Index(['A', 'B', 'C', 'D'], dtype='object')
 

Когда вы передаете это в список:

 [df.columns,'E','F','G']
 

вы получаете:

 [Index(['userId', 'column_1', 'column_2', 'column_3'], dtype='object'),'E','F','G']
 

v / s при использовании объединения:

 df.columns.union(['E','F','G'],sort=False)
 

Вы получаете:

 Index(['A', 'B', 'C', 'D', 'E', 'F', 'G'], dtype='object')
 

Комментарии:

1. но есть ошибка неправильного синтаксиса: из tolist() в to_list()

2. @Wallika. спасибо за комментарий. tolist() также работает для меня в версии 0. 25.1. Я думаю, что это могло измениться с версией. Рад, что вы смогли это понять.