wos*_*tom 35 python counter dataframe pandas
我Counter
在列表上用来计算这个变量:
final = Counter(event_container)
Run Code Online (Sandbox Code Playgroud)
打印最终给出:
Counter({'fb_view_listing': 76, 'fb_homescreen': 63, 'rt_view_listing': 50, 'rt_home_start_app': 46, 'fb_view_wishlist': 39, 'fb_view_product': 37, 'fb_search': 29, 'rt_view_product': 23, 'fb_view_cart': 22, 'rt_search': 12, 'rt_view_cart': 12, 'add_to_cart': 2, 'create_campaign': 1, 'fb_connect': 1, 'sale': 1, 'guest_sale': 1, 'remove_from_cart': 1, 'rt_transaction_confirmation': 1, 'login': 1})
Run Code Online (Sandbox Code Playgroud)
现在我想转换final
成熊猫DataFrame
,但是当我做的时候:
final_df = pd.DataFrame(final)
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误.
我猜最终不是一个合适的字典,所以如何转换final
为字典?或者它是另一种转换final
为DataFrame
?的方式?
EdC*_*ica 66
你可以构造使用from_dict
并传递param orient='index'
,然后调用,reset_index
这样你得到一个2列df:
In [40]:
from collections import Counter
d = Counter({'fb_view_listing': 76, 'fb_homescreen': 63, 'rt_view_listing': 50, 'rt_home_start_app': 46, 'fb_view_wishlist': 39, 'fb_view_product': 37, 'fb_search': 29, 'rt_view_product': 23, 'fb_view_cart': 22, 'rt_search': 12, 'rt_view_cart': 12, 'add_to_cart': 2, 'create_campaign': 1, 'fb_connect': 1, 'sale': 1, 'guest_sale': 1, 'remove_from_cart': 1, 'rt_transaction_confirmation': 1, 'login': 1})
df = pd.DataFrame.from_dict(d, orient='index').reset_index()
df
Out[40]:
index 0
0 login 1
1 rt_transaction_confirmation 1
2 fb_view_cart 22
3 fb_connect 1
4 rt_view_product 23
5 fb_search 29
6 sale 1
7 fb_view_listing 76
8 add_to_cart 2
9 rt_view_cart 12
10 fb_homescreen 63
11 fb_view_product 37
12 rt_home_start_app 46
13 fb_view_wishlist 39
14 create_campaign 1
15 rt_search 12
16 guest_sale 1
17 remove_from_cart 1
18 rt_view_listing 50
Run Code Online (Sandbox Code Playgroud)
您可以将列重命名为更有意义的内容:
In [43]:
df = df.rename(columns={'index':'event', 0:'count'})
df
Out[43]:
event count
0 login 1
1 rt_transaction_confirmation 1
2 fb_view_cart 22
3 fb_connect 1
4 rt_view_product 23
5 fb_search 29
6 sale 1
7 fb_view_listing 76
8 add_to_cart 2
9 rt_view_cart 12
10 fb_homescreen 63
11 fb_view_product 37
12 rt_home_start_app 46
13 fb_view_wishlist 39
14 create_campaign 1
15 rt_search 12
16 guest_sale 1
17 remove_from_cart 1
18 rt_view_listing 50
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用DataFrame.from_records
方法
import pandas as pd
from collections import Counter
c = Counter({'fb_view_listing': 76, 'fb_homescreen': 63, 'rt_view_listing': 50, 'rt_home_start_app': 46, 'fb_view_wishlist': 39, 'fb_view_product': 37, 'fb_search': 29, 'rt_view_product': 23, 'fb_view_cart': 22, 'rt_search': 12, 'rt_view_cart': 12, 'add_to_cart': 2, 'create_campaign': 1, 'fb_connect': 1, 'sale': 1, 'guest_sale': 1, 'remove_from_cart': 1, 'rt_transaction_confirmation': 1, 'login': 1})
df = pd.DataFrame.from_records(list(dict(c).items()), columns=['page','count'])
Run Code Online (Sandbox Code Playgroud)
这是一个单线和速度似乎是一样的。
或者使用这个变体让它们按最常用的排序。同样,性能大致相同。
df = pd.DataFrame.from_records(c.most_common(), columns=['page','count'])
Run Code Online (Sandbox Code Playgroud)
如果您想要两列,请在从字典orient='index'
创建时设置关键字参数:DataFrame
from_dict
final_df = pd.DataFrame.from_dict(final, orient='index')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23096 次 |
最近记录: |