python数据集的dicts列表

时间:2015-10-10 21:13:55

标签: python pandas

我有一个dict对象列表{key,value},如下所示:

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'}]

我已尝试了多种方法将其移动到pandas 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)  

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

您可以使用词典理解将词典列表合并为单个词典。然后将该字典传递给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的单行的问题,但最好避免使用dicts列表,因为为每行构建新的DataFrame效率很低

如果您解释原始数据的样子(包含多行数据)以及您希望最终的DataFrame看起来如何,您可能会得到更多有用的答案。

答案 1 :(得分:0)

如果您只想转换1个dict列表:

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

但是如果您计划使用这样的构造来创建具有许多行的DF,则应该为每个记录加入1个dict中的所有{key:values},并将它们附加到列表中:

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)