带有反字典(多个键)的字典作为2列数据帧

时间:2018-12-13 23:34:07

标签: python pandas dataframe counter

我有一个双语法例词典,其创建为

self.bigram_counts = defaultdict(lambda: Counter())

2个来自self.bigram_counts的示例行:

 [(None, Counter({'de': 1})),
 ('de', Counter({'la': 7839,filtradojardin': 1,'cantera': 236})))]

尝试按以下方式将其加载到数据帧中似乎无效:

bigrams2 = pd.DataFrame.from_dict(list((vocab.bigram_counts.keys(), 
                                       vocab.bigram_counts.values().keys()), 
                                       vocab.bigram_counts.values().values()))

我想从此数据帧中取出两列,一列包含完整的二元组,一列包含计数。在这种情况下,调用pd.DataFrame的最佳方法是什么?

以前,我使用过:

bigrams = pd.DataFrame.from_dict(list(vocab.bigram_counts.items()))
bigrams.columns = [['word(s)', 'count(s)']]
bigrams.head()

可以工作,但为count列提供一个计数器对象。我不认为.melt()就在这里,但是也许可以使用类似的东西?

所需的输出:

     0    1
0    None, de            1
1    de, la           7839
2    de, filtradojardin  1
3    de, cantera       236

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

flat_bigram_counts = (
    (word1, word2, count)
    for word1, counter in bigram_counts
    for word2, count in counter.items()
)
df = pd.DataFrame.from_records(flat_bigram_counts)

我的机器在示例中为两行输出以下内容:

      0               1     2
0  None              de     1
1    de              la  7839
2    de  filtradojardin     1
3    de         cantera   236