从包含字典列表的系列中创建熊猫数据框

时间:2019-02-04 04:51:47

标签: python pandas dictionary series

我的熊猫数据框的其中一列如下所示

>> df
    Item 
0   [{"id":A,"value":20},{"id":B,"value":30}]
1   [{"id":A,"value":20},{"id":C,"value":50}]
2   [{"id":A,"value":20},{"id":B,"value":30},{"id":C,"value":40}]

我想将其扩展为

      A      B       C
0     20     30      NaN
1     20     NaN     50
2     20     30      40

我尝试了

dfx = pd.DataFrame()
for i in range(df.shape[0]):
    df1 = pd.DataFrame(df.item[i]).T
    header = df1.iloc[0]
    df1 = df1[1:]
    df1 = df1.rename(columns = header)
    dfx = dfx.append(df1)

但这会花费很多时间,因为我的数据非常庞大。最好的方法是什么?

我的原始json数据如下:

{
  {
   '_id': '5b1284e0b840a768f5545ef6',
   'device': '0035sdf121',
   'customerId': '38',
   'variantId': '31',
   'timeStamp': datetime.datetime(2018, 6, 2, 11, 50, 11),
   'item': [{'id': A, 'value': 20},
          {'id': B, 'value': 30},
          {'id': C, 'value': 50}
  },
  {
   '_id': '5b1284e0b840a768f5545ef6',
   'device': '0035sdf121',
   'customerId': '38',
   'variantId': '31',
   'timeStamp': datetime.datetime(2018, 6, 2, 11, 50, 11),
   'item': [{'id': A, 'value': 20},
            {'id': B, 'value': 30},
            {'id': C, 'value': 50} 
  },
.............
}

1 个答案:

答案 0 :(得分:0)

我同意@JeffH,您应该真正了解如何构造DataFrame

假设您是从无法控制的地方获得的,则可以使用以下方法转换为所需的DataFrame

In []:
pd.DataFrame(df['Item'].apply(lambda r: {d['id']: d['value'] for d in r}).values.tolist())

Out[]:
    A     B     C
0  20  30.0   NaN
1  20   NaN  50.0
2  20  30.0  40.0