2014-11-09 2 views
0

Я пытаюсь создать DataFrame с несколькими индексами и одним столбцом. Если я печатаю следующее:Создание dataframes в Python: проблема с столбцами и индексом

InitialPosition=pd.DataFrame([1000000,1,1] ,index=['Cash'],columns=['a','b','c']) 

Я получаю сообщение об ошибке:

ValueError: Shape of passed values is (1, 3), indices imply (3, 1) 

Если изменить массив столбцов, как:

InitialPosition=pd.DataFrame([[1000000],[1],[1]] ,index=['Cash'],columns=['a','b','c']) 

то ошибка у меня есть:

AssertionError: 3 columns passed, passed data had 1 columns 

Вы знаете, почему это происходит?

Одно решение сделать:

InitialPosition=pd.DataFrame([1000000,1,1] ,columns=['Cash'],index=['a','b','c']).T 

, но не выглядит очень элегантно.

ответ

1

Проблема в том, что вы назначаете index как 'Cash', который является всего лишь 1 индексом. и [1000000,1,1] передает 3 строки данных.

И посмотрите на это:

InitialPosition=pd.DataFrame([1000000,1,1] ,columns=['Cash'],index=['a','b','c']).T 

можно передать 3 строку данных, 1 х столбцов и 3 индексов, что соответствует структуре dataframe.

Однако думать о массивах в DataFrame как x, y координаты как в columns, rows структура, здесь должно быть то, что ваш DataFrame выглядит следующим образом:

InitialPosition=pd.DataFrame([[1000000, 1, 1]] ,columns=['a', 'b', 'c'],index=['cash']) 

[[10000000, 1, 1]] переводится как на rows[0], columns[0], columns[1], columns[2] = ..., с колонны с меткой 'a', 'b', 'c' и 1 x индекс 'cash'.

В качестве альтернативы,

InitialPosition=pd.DataFrame([[1000000],[1],[1]] ,columns=['Cash'],index=['a','b','c']).T 

, который, [[1000000], [1], [1]] переводит к rows[0], columns[0] = [1000000], rows[1], columns[0] = 1, rows[2], columns[0] = 1, с 1 х колонке 'Cash' и 3 х индексов 'a', 'b', 'c' соответственно, затем транспонирования его в конце.

И даст вам этот результат:

InitialPosition 

      a b c 
cash 1000000 1 1 

И я сильная советую вам прочитать эту 10 Minutes to pandas, который объясняет вещи довольно тщательно, но не слишком трудно переварить.

+0

Спасибо Анзелю за такой подробный ответ. Это имеет большой смысл. – Escachator

Смежные вопросы