2016-01-15 3 views
1

У меня есть то, что кажется OrderdDict, содержащее OrderedDict в пределах подмножества того, что я называю «основным» OrderedDict. Я пытаюсь проанализировать этот объект на Pandas DataFrame. (Я использую Python 3, дистрибутив Anaconda.)Python: Анализ упорядоченного кода в Pandas Dataframe

Я искал и нашел несколько примеров о понимании таких структур данных, но структуры в примерах, похоже, не совпадают с моими.

Как вы можете видеть в нижеследующем примере, упорядоченные Dicts, о которых я забочусь, вложены в ключ, называемый «records» в «main» OrderedDict. Я хотел бы взять пример ниже:

od = OrderedDict([('totalSize', 3), ('done', True), ('records', [OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/123')])), ('Id', '4563456kjgfu4uyHHY3'), ('Phone', None), ('FirstName', 'Bill'), ('LastName', 'Bob'), ('Email', '[email protected]')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/234')])), ('Id', 'KJ23jdkd889DKJD'), ('Phone', '(444) 444-4444'), ('FirstName', 'Amanda'), ('LastName', 'Smith'), ('Email', '[email protected]')]), OrderedDict([('attributes', OrderedDict([('type', 'Cust'), ('url', '/example/url/foo/bar/654')])), ('Id', '23kkjKJkj2323KJ33'), ('Phone', '(555) 555-5555'), ('FirstName', 'Julie'), ('LastName', 'jackson'), ('Email', '[email protected]')])])])

... и получить DataFrame с колонками 'Id', 'Телефон', 'FirstName', 'LastName' и 'Электронная почта'.

До сих пор я был в состоянии извлечь то, что я считаю список списков:

li = [] 
list1 = [(record['Id'], record['Phone'],record['FirstName'],record['LastName']) 
for record in od['records']] 
li.append(list1) 
li[:] 

Этот список стратегии списков, однако не включает возможность имен столбцов. Я хотел бы попросить вашу помощь сделать это последним шагом в Pandas DataFrame.

спасибо, что заранее.

ответ

0

Я не знаком с Pandas DataFrame, но создание словаря списков, похоже, было правильным.

# Attributes of interest 
attrs = ['Id', 'Phone', 'FirstName', 'LastName', 'Email'] 
records = od['records'] 

data = {} 

for rec in records: 
    for k in attrs: 
     # setdefault initializes the array for key if necessary 
     data.setdefault(k, []).append(rec[k]) 

dframe = pandas.DataFrame(data) 

print(dframe) 

Решение, которое не требует указания полей. attributes игнорируется, так как не указано, как с ним обращаться, хотя, вероятно, его можно обрабатывать, как и другие.

records = od['records'] 
data = {} 

for rec in records: 
    for k, v in rec.items(): 
     if k == 'attributes': 
      continue 
     data.setdefault(k, []).append(v) 

dframe = pandas.DataFrame(data) 
print(dframe) 
+0

Спасибо! Я попытался проголосовать, но у меня пока нет репутации. Я бы отметил, что решил, но решение требует ручного объявления списка идентификаторов столбца. Было бы идеально, чтобы иметь возможность динамически извлекать идентификаторы столбцов, не указывая их. Я знаю, что я не указывал это как требование, поэтому, если никто другой не предлагает решение для этого, я буду отмечать как решение. Еще раз спасибо. – gpanda

+0

@gpanda Я добавил версию, которая не требует указания имен столбцов –

+0

Блестящий, это очень помогает, спасибо. Для всех, кто пытается проанализировать данные, возвращенные просто-salesforce, это будет отличное решение. – gpanda

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