【问题标题】:Generate a pandas dataframe from ordereddict?从ordereddict生成熊猫数据框?
【发布时间】:2017-11-06 00:09:34
【问题描述】:

我正在尝试从有序字典创建熊猫数据框以保留值的顺序。但由于某种原因,在创建数据框后,字段又被弄乱了。

这是有序字典的列表:

[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)

如有任何其他问题,请随时提出。

【问题讨论】:

  • pd.DataFrame(orderedDictList) 对我来说很好用
  • .from_dict 字典格式为{'col_a': [val_1, val_2], 'col_b': [val_3, val_4]} 除外,除非您通过orient=index

标签: python pandas dataframe ordereddictionary


【解决方案1】:

按照this 的回答,您需要明确指定您的列顺序:

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

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

【讨论】:

    【解决方案2】:
    df = pd.DataFrame(orderedDictList, columns=orderedDictList.keys())
    

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

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

    df = pd.DataFrame(orderedDictList)
    

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        【解决方案4】:

        按照@AdeelAhmad 的回答,我需要从一个 OrderDict 中获取列:

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

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2015-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-25
          • 1970-01-01
          • 2018-07-13
          • 2022-01-25
          相关资源
          最近更新 更多