2017-09-02 195 views
-2

如果我有字典对象的列表,我可以做这样的事情创建我的数据框:JSON数据转换为大熊猫数据帧

my_dict_list = [dict1, dict2, dict3, ...] 

cols = ['columnA', 'columnB', 'columnC'] # I choose which keys I want to keep 

df = pd.DataFrame(my_dict_list, columns=cols) 

它就像一个魅力。

但在我的情况下,对于某些特定的键,字典值包含一些其他字符,并且我想保留这些键的一些来创建我的列数据框。

我一直在试图找到解决办法,但我失败了

下面是摘录:

enter image description here

我的列表的第3项:https://wetransfer.com/downloads/8ba8d89ec70def6f46e8d6ca01ef553420170902233517/44ad5f

+0

你的问题是什么? –

+0

你的字典结构如何?请提供一些样品。 –

+0

@ScottBoston这是一个推文列表。列表中的每个条目都是一个包含“时间”,“文本”,“位置”等键的词典。但名为“用户”的键是一个键词列表的名词,如“name”,“screen_name”,“位置“等。 –

回答

2

使用pd.io.json.json_normalize并稍加预处理:

import pandas as pd 

cols = ['created_at', 'text', 'user'] 
user_cols = ['name', 'screen_name'] 

data2 = [{k : x[k] for k in cols} for x in data]  
for d in data2: 
    d['user'] = {k : d['user'][k] for k in user_cols} 

out = pd.io.json.json_normalize(data2)\ 
      .rename(columns=lambda x: x.replace(r'user.', '')) 
print(out) 

         created_at \ 
0 Sat Sep 02 07:10:33 +0000 2017 
1 Fri Sep 01 19:58:18 +0000 2017 
2 Fri Sep 01 18:53:27 +0000 2017 

               text   name \ 
0 @SitePenalise On pourrait rajouter Les EMD son... Régis Stéphant 
1 Possible de recevoir la dernière version à jou... Pierrick Butty 
2 Les sites placés en page 1 sur mots clés à for... Site Pénalisé 

    screen_name 
0  Ledzep_56 
1 pierrickbutty 
2 SitePenalise