【问题标题】:dictionary with counter dictionary (multiple keys) as a 2 column dataframe带有计数器字典(多个键)的字典作为 2 列数据框
【发布时间】:2018-12-13 23:34:07
【问题描述】:

我有一本二元词词典,它被创建为

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

self.bigram_counts 中的 2 个样本行:

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

我想要这个数据框中的 2 列,一列包含完整的二元组,另一列包含计数。在这种情况下调用 pd.DataFrame 的最佳方式是什么?

以前,我用过:

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

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

期望的输出:

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

【问题讨论】:

  • 你能给我们提供一个最小的、完整的和可验证的例子吗?这肯定会让我们更有效地帮助您。
  • 现在添加了一些,希望这有效

标签: python pandas dataframe counter


【解决方案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

【讨论】:

  • @FredericBastiat 不是 100% 确定这是你想要的;如果没有,请在您的问题中添加两个示例行的预期输出以澄清
  • 非常接近。我用所需的输出更新了我的问题。谢谢
  • 我把 ((word1, word2), count) 放在代码的第二行,它似乎工作。谢谢!
  • ack 我收到 ValueError: setting an array element with a sequence。喂食 pca.fit(flat_bigram_counts) 时。我知道我需要展平这些元组,但我被绊倒了。请帮忙。
  • (我对我的答案做了一个小修改,添加了df。)一般来说,DataFrames“不喜欢”将元组或列表作为元素(他们真正可以接受的唯一序列是字符串)。所以我的直觉告诉我坚持使用(word1, word2, count) 布局,在我的编辑中制作df 变量,并使用pca.fit(df) 之类的东西。 (也许每个词列都是一个特征?不好意思,我对data sci了解不多。)
猜你喜欢
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多