如何从有序字典创建数据框?
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 中,您有 list
个 OrderedDict
个条目,在上面的示例中,您只有 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!
我有一个有序字典,它有 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 中,您有 list
个 OrderedDict
个条目,在上面的示例中,您只有 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!