2015-05-31 3 views
2

Есть ли причина, почему назначение столбцов в Pandas благоприятствует прописному букве над строчным регистром?Верхнее приоритет в присвоении имени столбца pandas

Пример:

dframe = DataFrame({'city':['Alma','Brian Head', 'Fox Park'], 
        'altitude':[3158,3000,2762]}) 

возвращает DataFrame с колоннами в высоте порядка, города.

Принимая во внимание:

dframe = DataFrame({'City':['Alma','Brian Head', 'Fox Park'], 
        'altitude':[3158,3000,2762]}) 

возвращает DataFrame с колоннами в порядке города, высоты.

Является ли это характерным для панды или общего поведения python?

+1

вы передаете Dict так ключ порядка не обязательно такой же порядок, как они объявлены нет? – EdChum

+2

Это общее поведение python. Вы можете попробовать отсортировать список с этими именами, чтобы увидеть его. – joris

ответ

5

Вы действительно не спрашивали об этом, но я предполагаю, что есть подразумеваемый вопрос о том, как сохранить первоначальный заказ? Если да, то вот три способа:

1) То же базовый словарь конструктор, но завернуть в collections.OrderedDict (благодаря @ shx2 для коррекции):

from collections import OrderedDict 
df1 = pd.DataFrame(OrderedDict([ ('city',['Alma','Brian Head', 'Fox Park']), 
            ('altitude',[3158,3000,2762]) ])) 

2) Non-словарь конструктор, где specifiy данные массив и имена столбцов в отдельности, однако, это, по существу, требует ряда ориентированных на запись, а не столбец ориентированных как со словарем конструктору:

lst = [['Alma','Brian Head','Fox Park'], 
     [3158,3000,2762]] 
df2 = pd.DataFrame(map(list, zip(*lst)), 
        columns = ['city','altitude']) 

3) Простейший способ, вероятно, просто указать порядок после создания dataframe (спасибо t о @EdChum для ловли ошибки в исходном сообщении):

df3 = df[['city','altitude']] 

тест, что результаты одинаковы для всех трех:

In [149]: all(df1==df2) 
Out[149]: True 

In [150]: all(df1==df3) 
Out[150]: True 
+1

Не будет ли последнее переименовывать столбцы, а не переупорядочивать их? вы хотите 'df.ix [:, ['city', 'heightitude']]' переупорядочить их – EdChum

+2

или вы можете сделать 'df = df [['city', 'heightitude']]' – EdChum

+0

Да, второй путь это то, что я намеревался сделать изначально. Исправлено сейчас, спасибо большое! – JohnE

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