如何从有序字典创建数据框?

How to create dataframe from ordered dictionary?

我有一个有序字典,它有 4 个键和多个值。我试着像这样创建数据框

  df = pd.DataFrame(items, index=[0])
  print('\ndf is ',df)

但这会触发 ValueError,因为字典中的多个值不匹配。 排序字典如下:

OrderedDict([('Product', 'DASXZSDASXZS'), ('Region', ['A', 'B', 'C']), ('Items', ['1', '2', '3']), ('Order', ['123', '456', '789'])])

我希望数据帧格式如下:

Product      Region Items Order
DASXZSDASXZS A      1     123
DASXZSDASXZS B      2     456
              ...

如何为数据框实现这种格式?

没有足够的代表发表评论。为什么要尝试指定 index=[0]? 简单做

df = pd.DataFrame(items)

有效;如果要更改索引,可以稍后使用 df.set_index(...)

进行设置

@viktor_dmitry 你对@Battleman 的评论链接到外部数据,这是一个解决方案。

https://www.codepile.net/pile/GY336DYN 中,您有 listOrderedDict 个条目,在上面的示例中,您只有 1 个 OrderedDict。每个都需要被视为一个单独的 DataFrame 结构。从结果列表中使用 concat 得到最终的 DataFrame:

ods = [OrderedDict([('MaterialNumber', '2XV9450-1AR24'), ('ForCountry'...]), 
       OrderedDict([('MaterialNumber', ...), 
       ...]
new_df = pd.concat([pd.DataFrame(od) for od in ods])
# new_df has 4 columns and many rows

另请注意,您的示例项目中有 1 个无效,您需要将其过滤掉,其余的似乎没问题:

ods[21]
OrderedDict([('MaterialNumber', '4MC9672')]) # lacks the rest of the columns!