2016-05-27 3 views
2

П.Д. .__ version__ = 0.18.0Панды DataFrame строительство из списка OrderedDict: сохраняющие порядок столбцов

Предположим, у вас есть список из OrderedDict:

[OrderedDict([('SecurityCode', 'IDX.MSDENON'), ('DescriptionLong', 'MSCI Norway NR USD (EUR)'), ('DataSrc', 'BGN.COB'), ('Ticker', 'MSDENON Index'), ('LastRun', None)])] 

если вы строите DataFrame от дефолта конструктор (или даже с .from_dict() метод)

df = pd.DataFrame(mylist) 

не сохраняет порядок столбцов:

 DataSrc DescriptionLong LastRun SecurityCode   Ticker 
    0 BGN.COB MSCI Norway NR USD (EUR) None IDX.MSDENON MSDENON Index 

тогда:

df = pd.DataFrame(data, columns=data[0].keys()) 

    SecurityCode   DescriptionLong DataSrc   Ticker LastRun 
    0 IDX.MSDENON MSCI Norway NR USD (EUR) BGN.COB MSDENON Index None 

делает perserve порядок столбцов.

Я прочитал в StackOverflow, что такая ошибка присутствовала в 0.11, но IMHO нам не нужно указывать column = option в конструкторе по умолчанию. Я что-то упустил или это ошибка, требующая отчета?

EDIT: Была создана и принята проблема github на pydata/pandas repo. Это «ошибка» в конструкторе по умолчанию, в любом случае исключая порядок столбцов OrderedDict. Поправка была запланирована на следующую версию (фиксации принятой для 0.18-2)

+0

Все еще работает в этом'0.18.1', вы можете обновить эту проблему или оставить комментарий по github – EdChum

+1

Что бы вы ожидали, если второй OrderedDict в списке имеет другой порядок? Разве не имеет смысла заставлять вас указывать, что вы хотите использовать порядок первого значения? –

+0

Эти OrderedDict создаются после SQL-запроса, поэтому порядок определяется один раз для всех – comte

ответ

1

Это действительно вопрос о DataFrame конструктору (КФ моего EDIT).
Я чувствую, что столбец = вариант обхода более приятный (синтаксически более понятный), чем предлагаемое решение hhbilly.

0

Попробуйте это:

df = pd.DataFrame.from_dict(data[0], orient='index').T