将收藏柜台变成字典

时间:2015-08-04 11:20:59

标签: python dictionary pandas collections

我有一个由函数产生的集合结果:

Counter(df.email_address)

它返回每个单独的电子邮件地址及其重复次数。

Counter({nan: 1618, 'store@kiddicare.com': 265, 'testorders@worldstores.co.uk': 1})

我想要做的就是使用它,好像它是一个字典并用它创建一个pandas数据帧,其中两列用于电子邮件地址,另一列用于相关值。

我尝试过:

dfr = repeaters.from_dict(repeaters, orient='index')

但我收到以下错误:

AttributeError: 'Counter' object has no attribute 'from_dict'

看起来像Counter不是字典的东西。关于如何将它附加到df的任何想法?

3 个答案:

答案 0 :(得分:10)

d = dict(Counter(df.email_address))

修改

或者@Trif Nefzger如何建议:

<li id="liHeader"><a href="#tabHeader" title="Header">General</a></li>
<li id="liFooter"><a href="#tabNotesComments" id="tabNotes" title="Notes/History of Job">Notes (<%= NoOfNotes %>)</a></li>
<li runat="server" id="liDelivery" ><a href="#<%= tabDeliveryDbrief.ClientID %>" title="Delivery Dbrief">Delivery Dbrief</a></li>

答案 1 :(得分:1)

正如ajcr在评论中写道的那样,from_dict是一种属于数据框架的方法,因此您可以编写以下内容来实现您的目标:

from collections import Counter
import pandas as pd

repeaters = Counter({"nan": 1618, 'store@kiddicare.com': 265, 'testorders@worldstores.co.uk': 1})

dfr = pd.DataFrame.from_dict(repeaters, orient='index')
print dfr

<强>输出:

testorders@worldstores.co.uk     1
nan                           1618
store@kiddicare.com            265

答案 2 :(得分:0)

或者,您可以使用pd.Series.value_counts,它会返回Series个对象。

df.email_address.value_counts(dropna=False)

示例输出:

b@y.com    2
a@x.com    1
NaN        1
dtype: int64

这不完全是你所要求的,但看起来就像你想要达到的目标。