从柜台创建三列

时间:2014-09-22 16:12:19

标签: python python-3.x dictionary pandas

现在,我的计数器看起来像这样:

(('you', 'call'), 3.2875047316896584): 1, 
(('bonus', 'offer'), 5.880001319229578): 1, 
(('without', 'warranty'), 10.11244740522995): 1

我正在尝试将这些值传递给具有三列,Bigrams,得分和频率的Pandas DF

例如,使用上面的第一个值,我的预期DF看起来像

 Bigrams        Score                   Frequency
 you call       3.2875047316896584         1

我正在尝试使用这段代码,但它一直给我一个错误

 c = Counter()
 frequencies = [[" ".join(k),v,d] for k,v,d in c]
 frame = pd.DataFrame(frequencies, columns=['Bigrams','Score','Frequency'])

然而,这一直在说:值错误:需要超过2个值才能解压缩。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在使用键和值。迭代字典(映射)只产生密钥。使用dict.items使其产生两者。

并且正确使用元组解包。它应匹配产生的项目。

>>> from collections import Counter
>>> import pandas as pd
>>>
>>> c = Counter({
...     (('you', 'call'), 3.2875047316896584): 1,
...     (('bonus', 'offer'), 5.880001319229578): 1,
...     (('without', 'warranty'), 10.11244740522995): 1
... })
>>> frequencies = [[" ".join(k),v,d] for (k, v), d in c.items()]
>>> frame = pd.DataFrame(frequencies, columns=['Bigrams','Score','Frequency'])
>>> print(frame)
            Bigrams      Score  Frequency
0       bonus offer   5.880001          1
1  without warranty  10.112447          1
2          you call   3.287505          1