从ordereddict生成一个pandas数据帧?

时间:2017-06-05 08:55:16

标签: python pandas dataframe ordereddictionary

我正在尝试从ordereddict创建一个pandas数据帧以保留值的顺序。但由于某种原因,在创建数据帧后,字段再次混乱。

以下是有序条款清单:

[OrderedDict([
  ('key_a',
  'value_a'),
  ('key_b',
  'value_b'),
]),
OrderedDict([
  ('key_a',
  'value_c'),
  ('key_b',
  'value_d'),
])
]

现在我应该如何从这些创建一个pandas DataFrame?我正在寻找的是类似的东西(重要的是key_a和key_b等列名称顺序):

  key_a    key_b
0 value_a  value_b
1 value_c  value_d

我试过了:

pd.DataFrame.from_records(orderedDictList)
pd.DataFrame.from_dict(orderedDictList)

随意提出任何其他问题。

4 个答案:

答案 0 :(得分:15)

this回答后,您需要明确指定列顺序:

df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())

当然,首先你需要确保你有一个有序的字典。

答案 1 :(得分:2)

您可以使用Counter模块中的collections执行此类操作:

from collections import OrderedDict, Counter
import pandas as pd

a = {'key_a': 'value_a', 'key_b':'value_b'}
b = {'key_a': 'value_c', 'key_b':'value_d'}

ord_list = [OrderedDict(a), OrderedDict(b)]

col = Counter()
for k in ord_list:
    col.update(k)


df = pd.DataFrame([k.values() for k in ord_list], columns = col.keys())

print(df)

输出:

     key_b    key_a
0  value_b  value_a
1  value_d  value_c

答案 2 :(得分:0)

df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())

这不起作用,因为列表没有键值对。

您不需要指定列顺序,因为orderedDicts会固有地保留列顺序。以下将起作用:

df = pd.DataFrame(orderedDictList)

答案 3 :(得分:0)

在@AdeelAhmad回答之后,我需要从一个OrderDict获取列:

df = pd.DataFrame(orderedDictList, columns=orderedDictList[0].keys())

希望有帮助