【问题标题】:Dictionary of nested lists to pandas DataFrame嵌套列表字典到 pandas DataFrame
【发布时间】:2017-12-26 05:11:30
【问题描述】:

我正在尝试了解 pandas 的工作原理,但我认为我遗漏了一些明显的东西。

我有一个像这样的文件:

dict_spl ={'doc1':[[('word11',1,1),('word12',1,2)]], 'doc2':[[('word21',2,1),('word22',2,2)]]}

我正在尝试获取一个看起来像这样的pandas DataFrame:

# doc1 word11 1 1
# doc1 word12 1 2
# doc2 word21 2 1
# doc2 word22 2 2

我还没有找到一种在复制公共值的同时创建新列和新行的方法。

【问题讨论】:

  • 你是怎么把这个传给 pandas 的?
  • pd.DataFrame(dict_spl).T 为例。除了它显然没有给出我想要的结果。我不确定它是否真的回答了你的问题。
  • 你能改变你的字典结构吗?如果是这样,您可以通过以下方式创建您在上面写出的框架:pd.DataFrame.from_records([('a','a1',1,1),('a', 'a2',1,2), ('b', 'b1',2,1),('b', 'b2',2,2)])
  • 不,我不能轻易改变字典的结构。我在使用 Spacy 解析存储在 DataFrame 中的几个文档时获得它,它返回给我的东西看起来像 dict_spl

标签: python pandas dictionary nested-lists


【解决方案1】:

你可以使用:

a = [[(k, *y) for y in v[0]] for k,v in dict_spl.items()]
a = [item for sublist in a for item in sublist]

df = pd.DataFrame(a, columns=list('abcd'))
print (df)
      a       b  c  d
0  doc1  word11  1  1
1  doc1  word12  1  2
2  doc2  word21  2  1
3  doc2  word22  2  2

我觉得有更好的解决方案,所以我问here

#Martijn Pieters♦'s solution
a = [(k, *t) for k, v in dict_spl.items() for t in v[0]]
df = pd.DataFrame(a, columns=list('abcd'))
print (df)
      a       b  c  d
0  doc2  word21  2  1
1  doc2  word22  2  2
2  doc1  word11  1  1
3  doc1  word12  1  2

【讨论】:

  • 完美运行。我需要一些时间才能清楚地了解你做了什么。谢谢。
  • @JeromeLaurent - 很高兴能帮上忙!
猜你喜欢
  • 2019-06-27
  • 2022-01-01
  • 2016-07-24
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多