2015-10-10 3 views
1

У меня есть список объектов Словаре {key,value} следующим образом:список питон dicts к dataframe

recd = [{'Type': 'status'}, {'Origin': 'I just earned the Rookie badge on #Yelp!'}, 
     {'Text': 'I just earned the Rookie badge on'}, {'URL': ''}, 
     {'ID': '95314179338158080'}, {'Time': 'Sun Jul 24 21:07:25 CDT 2011'}, 
     {'RetCount': '0'}, {'Favorite': 'false'}, 
     {'MentionedEntities': ''}, {'Hashtags': 'Yelp'}] 

Я пытался любое количество способов, чтобы переместить это в панд dataframe объекта, где ключ является столбец имя и значение - это значение записи.

s = pd.Series(data=recd) ## try #1 
tweets = tweets.append(s, ignore_index=True) 

tweets = tweets.append(recd, ignore_index=True) #try #2 

tweets.from_items(recd) #try #3 

mylist = [item.split(',') for item in recd] #try #4 (stack overflow) 
tdf = pd.DataFrame(mylist) 

tweets.from_records(recd) #try #5 

tweets.concat(recd, axis=1, etc) # tries 6-20 

Конечно, ни одна из этих работ не работает. На данный момент я пробовал очевидное и использовал все различные параметры columns=, ignore_index и т. Д.) Я пропускаю что-то очевидное. Обычно я работаю со структурированными дампами данных, так что это для меня ново. Я подозреваю, что не правильно форматирую свои данные, но решение ускользает от меня.

Фон: Я строю каждый объект recd по одному из большого проанализированного файла данных с нестандартным форматом в единую полную запись, а затем пытаюсь преобразовать его в кадр данных pandas, где я могу его сохранить в любом количестве используемых форматов. Этот процесс также удаляет кучу ошибок данных. Код, который делает это:

k = line.split(":",1) 
key = str(k[0].strip()) 
val = str(k[1].strip()) 
if key in TweetFields: 
    d = {key : val} # also tried d = [key:val] 
    recd.append(d) 

Спасибо за ваш совет.

+0

Вы имеете в виду что-то вроде 'df = pd.DataFrame.from_records (recd)'? –

+0

Я тоже это пробовал. это не сработало. – HarveyS

+0

Не работал как, какой результат вы ожидаете? –

ответ

0

Вы можете использовать понимание dict, чтобы объединить список dicts в один dict. Затем передайте, что Dict в pd.DataFrame:

In [105]: pd.DataFrame({key: [val] for dct in recd for key, val in dct.items()}) 
Out[105]: 
    Favorite Hashtags     ID MentionedEntities \ 
0 false  Yelp 95314179338158080      

            Origin RetCount \ 
0 I just earned the Rookie badge on #Yelp!  0 

           Text       Time Type URL 
0 I just earned the Rookie badge on Sun Jul 24 21:07:25 CDT 2011 status  

Хотя это решает проблему преобразования списка dicts в один ряд из в DataFrame, было бы preferrable, чтобы избежать использования списка dicts, потому что строительство нового DataFrame для каждой строки неэффективен.

Вы можете получить более полезные ответы, если вы объясните, как выглядят ваши исходные данные (с более чем одной строкой данных) и как вы хотите, чтобы окончательный DataFrame выглядел.

+0

Необработанные данные представляют собой список пар «ключ: значение» с ошибками и разделителями записей «***» в начале и конце каждой записи. Я подозреваю, что моя проблема связана не с пандами, а с моим первоначальным форматированием данных в пары {K, V}. Не уверен, как избежать создания записи данных за раз, поскольку я отфильтровываю ошибки, когда я иду. Этот файл подходит к диапазону ТБ ... – HarveyS

0

Если вы хотите просто преобразовать 1 список Dict:

temp_df = pd.DataFrame([{key: value for dict in recd for key, value in dict.items()}]) 

Но если вы планируете использовать такую ​​конструкцию, чтобы создать DF с большим количеством строк, вы должны объединить все {ключ: значение} в 1 Dict для каждого записать и добавить их в список:

recd = [{'Type': 'status', 'Origin': 'I just earned the Rookie badge on #Yelp!', 
    'Text': 'I just earned the Rookie badge on', 'URL': '', 
    'ID': '95314179338158080', 'Time': 'Sun Jul 24 21:07:25 CDT 2011', 
    'RetCount': '0', 'Favorite': 'false', 
    'MentionedEntities': '', 'Hashtags': 'Yelp'}] 

recd.append({'Type': 'status', 'Origin': 'BLAH BLAH', 
    'Text': 'One more on the road', 'URL': '', 
    'ID': 'NA', 'Time': 'NA', 
    'RetCount': 'NA', 'Favorite': 'false', 
    'MentionedEntities': '', 'Hashtags': 'Yelp'}) 

temp_df = pd.DataFrame(recd) 
Смежные вопросы