首页 > 解决方案 > 熊猫从列表中添加缺失的行

问题描述

我有一个如下所示的数据集:

data = [
 {'frame_id': 111, 'circle': 3, 'square': 5, 'triangle': 7},
 {'frame_id': 222, 'circle': 1, 'square': 10, 'triangle': 0}
]

我有一个 frame_ids 列表:

frame_ids = [111, 222, 333, 444]

我想用 0 值填写缺少的 frame_id 的记录

结果应该是:

res = [
 {'frame_id': 111, 'circle': 3, 'square': 5, 'triangle': 7},
 {'frame_id': 222, 'circle': 1, 'square': 10, 'triangle': 0},
 {'frame_id': 333, 'circle': 0, 'square': 0, 'triangle': 0},
 {'frame_id': 444, 'circle': 0, 'square': 0, 'triangle': 0}
]

在这里我正在加载我的数据框:

import pandas as pd

df = pd.DataFrame(data)

我怎样才能继续使用 pandas 实现结果?

标签: pythonpandas

解决方案


DataFrame.set_indexDataFrame.reindex和一起使用DataFrame.reset_index

df1 = df.set_index('frame_id').reindex(frame_ids, fill_value=0).reset_index()
print (df1)
   frame_id  circle  square  triangle
0       111       3       5         7
1       222       1      10         0
2       333       0       0         0
3       444       0       0         0

print (df1.to_dict('records'))
[{'frame_id': 111, 'circle': 3, 'square': 5, 'triangle': 7}, 
 {'frame_id': 222, 'circle': 1, 'square': 10, 'triangle': 0},
 {'frame_id': 333, 'circle': 0, 'square': 0, 'triangle': 0}, 
 {'frame_id': 444, 'circle': 0, 'square': 0, 'triangle': 0}]

推荐阅读