У меня есть следующий массив, содержащий строковые значения:

type(array)
pandas.core.indexes.base.Index

print(array)
Index(['hooiland_1_1', 'hooiland_1_2', 'hooiland_1_3', 'hooiland_1_4',
       'roggeteelt_1_1', 'roggeteelt_1_2', 'roggeteelt_1_3', 'roggeteelt_1_4',
       'zwartebraak_1_1', 'zwartebraak_1_2', 'zwartebraak_1_3',
       'zwartebraak_1_4', 'hooiland_2_1', 'hooiland_2_2', 'hooiland_2_3',
       'hooiland_2_4', 'roggeteelt_2_1', 'roggeteelt_2_2', 'roggeteelt_2_3',
       'roggeteelt_2_4', 'zwartebraak_2_1', 'zwartebraak_2_2',
       'zwartebraak_2_3', 'zwartebraak_2_4'],
      dtype='object')

Я хочу использовать каждое из этих строковых значений этого массива как отдельное имя столбца в пустом кадре данных pandas.

Пытался:

pd.DataFrame(columns=["class",array]) ###first column is "class"
gives error: Invalid syntax

Также попытался разбить массив, но безуспешно:

array.split()
gives error :AttributeError: 'Index' object has no attribute 'split'

Есть простой способ сделать это?

Ожидаемый результат: dataframe :

class    hooiland_1_1    hooiland_1_2    hooiland_1_3 .... zwartebraak_2_4
class1   value           value           value             value
class2
class3

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

0
Robvh 28 Июн 2019 в 14:48

3 ответа

Лучший ответ
pd.DataFrame(columns=["class"] + array.tolist())
1
Sunil Goyal 28 Июн 2019 в 11:52

Вам нужно Index.insert

idx_arr = idx_arr.insert(0, 'class')

Out[444]:
Index(['class', 'hooiland_1_1', 'hooiland_1_2', 'hooiland_1_3', 'hooiland_1_4',
       'roggeteelt_1_1', 'roggeteelt_1_2', 'roggeteelt_1_3', 'roggeteelt_1_4',
       'zwartebraak_1_1', 'zwartebraak_1_2', 'zwartebraak_1_3',
       'zwartebraak_1_4', 'hooiland_2_1', 'hooiland_2_2', 'hooiland_2_3',
       'hooiland_2_4', 'roggeteelt_2_1', 'roggeteelt_2_2', 'roggeteelt_2_3',
       'roggeteelt_2_4', 'zwartebraak_2_1', 'zwartebraak_2_2',
       'zwartebraak_2_3', 'zwartebraak_2_4'],
      dtype='object')

pd.DataFrame(columns=idx_arr)

Out[447]:
Empty DataFrame
Columns: [class, hooiland_1_1, hooiland_1_2, hooiland_1_3, hooiland_1_4, roggete
elt_1_1, roggeteelt_1_2, roggeteelt_1_3, roggeteelt_1_4, zwartebraak_1_1, zwarte
braak_1_2, zwartebraak_1_3, zwartebraak_1_4, hooiland_2_1, hooiland_2_2, hooilan
d_2_3, hooiland_2_4, roggeteelt_2_1, roggeteelt_2_2, roggeteelt_2_3, roggeteelt_
2_4, zwartebraak_2_1, zwartebraak_2_2, zwartebraak_2_3, zwartebraak_2_4]
Index: []
1
Andy L. 28 Июн 2019 в 11:57

Ваш код pd.DataFrame(columns=["class",array]) не генерирует список и, следовательно, неверный синтаксис.

Если вы хотите добавить «класс» в начало индекса, вы можете попробовать:

pd.DataFrame(columns=array.insert(0, 'class'))  # adding 'class' to the beginning of the index

Кстати, вы можете не использовать array в качестве имени переменной ...

1
Dino 28 Июн 2019 в 11:57