【问题标题】:Pandas: Convert dataframe columns into dict with col title as dict key and col values as dict valuesPandas:将数据框列转换为 dict,其中 col 标题作为 dict 键,col 值作为 dict 值
【发布时间】:2017-04-13 21:03:32
【问题描述】:

我有一个看起来像这样的数据框:

      NAME              ID 
155  ARBITRARY_A    697381   
208  ARBITRARY_B    691820   
265  ARBITRARY_C    691782   
272  ARBITRARY_D    695593 

我想将它转换成一个字典列表,如下所示:

[{name:ARBITRARY_A, id:697381}, {name:ARBITRARY_B, id:691820},
 {name:ARBITRARY_C, id:691782}, {name:ARBITRARY_D, id:695593}]

执行此操作的最快/最佳方法是什么?

【问题讨论】:

  • df.to_dict('record')?

标签: python pandas dictionary


【解决方案1】:

您可以通过自己进行推导来获得更多性能

v = df.values.tolist()
c = df.columns.values.tolist()

[dict(zip(c, x)) for x in v]

[{'ID': 697381L, 'NAME': 'ARBITRARY_A'},
 {'ID': 691820L, 'NAME': 'ARBITRARY_B'},
 {'ID': 691782L, 'NAME': 'ARBITRARY_C'},
 {'ID': 695593L, 'NAME': 'ARBITRARY_D'}]

小给定df

更大的d1

【讨论】:

  • 漂亮的颜色,但我们需要弄清楚如何在标记中做到这一点,而不是png。或者也许从 iPython 复制和粘贴到 SO 标记应该是一件事?
  • 你可能只是激励我想出更好的东西:-)
  • @piRSquared 我再给你一个stackoverflow.com/questions/43504945/… :)
【解决方案2】:

如 cmets 所示,可以使用 pandas.DataFrame.to_dict()。在您的情况下,您需要将orient 设为record

代码:

df.to_dict('record')

测试代码:

df = pd.read_fwf(StringIO(u"""
          NAME              ID
    155  ARBITRARY_A    697381
    208  ARBITRARY_B    691820
    265  ARBITRARY_C    691782
    272  ARBITRARY_D    695593"""),
                 header=1, index_col=0)

print(df)
print(df.to_dict('record'))

结果:

            NAME      ID
155  ARBITRARY_A  697381
208  ARBITRARY_B  691820
265  ARBITRARY_C  691782
272  ARBITRARY_D  695593

[{u'NAME': u'ARBITRARY_A', u'ID': 697381L}, {u'NAME': u'ARBITRARY_B', u'ID': 691820L}, {u'NAME': u'ARBITRARY_C', u'ID': 691782L}, {u'NAME': u'ARBITRARY_D', u'ID': 695593L}]

【讨论】:

  • 很好的答案!我特别喜欢你使用 bold 加上我的一个 :-)
  • 粗体字的味道更好。
【解决方案3】:

试试:

df.to_dict()

如果这没有产生预期的结果,请尝试转置 DataFrame:

df.T.to_dict()

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2021-08-07
    • 2017-04-01
    • 2019-09-27
    • 2018-09-06
    • 2022-06-17
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多