python - Pandas - 从字典列表创建 df

标签 python pandas dictionary

我有以下格式的数据(每个字典包含 3 个列表的列表):

[{40258: [['2018-07-03T14:13:41'], ['Open'], ['Closed']]},
 {40257: [['2018-07-03T13:47:55',
    '2018-07-03T14:21:52',
    '2018-07-04T11:56:44'],
   ['Open', 'In Progress', 'Waiting on 3rd Party'],
   ['In Progress', 'Waiting on 3rd Party', 'In Progress']]},
 {40255: [['2018-07-03T13:12:58'], ['Open'], ['Closed']]},
 {40250: [[], [], []]}]

我想将上面的转换成下面的 df:

key    List1-1              List1-2            List1-3               List2-1     List2-2          List2-3                 List3-1         List3-2                   List3-3
40258  2018-07-03T14:13:41  nan                nan                   'Open'      nan              nan                     'Closed'        nan                       nan
40257  2018-07-03T13:47:55 2018-07-03T14:21:52 2018-07-04T11:56:44   'Open'     'In Progress'    'Waiting on 3rd Party'   'In Progress'   'Waiting on 3rd Party'   'In Progress'
40255  2018-07-03T13:12:58  nan                nan                   'Open'      nan              nan                     'Closed'        nan                       nan
40250  nan                  nan                nan                    nan        nan              nan                      nan            nan                       nan
  • 每个键是一行,列表的每个元素是一列。
  • 外层列表包含 50,000 个要组成行的字典。
  • 始终恰好有 3 个内部列表。
  • 内部列表的长度可变 - 从 0 到最大 25。

我已经尝试了普通的 pd.DataFramepd.DataFrame.from_dict 但我找不到处理字典中多个列表的解决方案。

非常感谢任何帮助。

最佳答案

data=[{40258: [['2018-07-03T14:13:41'], ['Open'], ['Closed']]},
 {40257: [['2018-07-03T13:47:55',
     '2018-07-03T14:21:52',
     '2018-07-04T11:56:44'],
    ['Open', 'In Progress', 'Waiting on 3rd Party'],
    ['In Progress', 'Waiting on 3rd Party', 'In Progress']]},
  {40255: [['2018-07-03T13:12:58'], ['Open'], ['Closed']]},
  {40250: [[], [], []]}]

f = lambda x: x + [np.nan]*(3-len(x))
mod_data = [ [k]+ sum(list(map(f, v)), []) for d in data for k,v in d.items()]

cols = ['key', 'List1-1', 'List1-2', 'List1-3', 'List2-1', 'List2-2', 'List2-3', 'List3-1', 'List3-2', 'List3-3']
df = pd.DataFrame(mod_data, columns=cols).set_index('key')
print(df)

输出

                   List1-1              List1-2              List1-3 List2-1      List2-2               List2-3      List3-1               List3-2      List3-3
key                                                                                                                                                            
40258  2018-07-03T14:13:41                  NaN                  NaN    Open          NaN                   NaN       Closed                   NaN          NaN
40257  2018-07-03T13:47:55  2018-07-03T14:21:52  2018-07-04T11:56:44    Open  In Progress  Waiting on 3rd Party  In Progress  Waiting on 3rd Party  In Progress
40255  2018-07-03T13:12:58                  NaN                  NaN    Open          NaN                   NaN       Closed                   NaN          NaN
40250                  NaN                  NaN                  NaN     NaN          NaN                   NaN          NaN                   NaN          NaN

关于python - Pandas - 从字典列表创建 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51166473/

相关文章:

python - 如何旋转数据框

python - 在字典的字典列表上使用reduce

python - 响应 Listctrl 变化恰好一次

python-3.x - Pandas to_datetime 似乎与 numpy datetime 对象不兼容

python - 将唯一分层列拆分为更多列

python - 转换字典中的嵌套列表(列表中的每个元素必须是字典中的键)

C# XNA : Trouble with Dictionaries

python - %load filename.py 命令在 Jupyter 笔记本中的哪里查找?

python - PyQt:在 Windows 中为我的程序执行技巧 "start at boot"的最佳方法

python - 如何在 python 中过滤列表字典?