카운터 개체를 판다 데이터 프레임으로 변환
사용했습니다.Counter
이 변수를 계산할 목록에서:
final = Counter(event_container)
인쇄 최종 제공:
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})
이제 나는 전환하고 싶습니다.final
팬더로DataFrame
, 하지만 내가 할 때는
final_df = pd.DataFrame(final)
그런데 제가 오류가 났어요.
기말고사는 제대로 된 사전이 아닌 것 같은데 어떻게 변환할 수 있나요?final
사전으로?아니면 다른 방법으로 전환하는 것인가요?final
에 이르기까지DataFrame
?
pass param 을 사용하여 구성할 수 있습니다.orient='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
열 이름을 보다 의미 있는 것으로 바꿀 수 있습니다.
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
다른 옵션은 다음을 사용하는 것입니다.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'])
원라이너인데 속도는 그대로인 것 같습니다.
또는 이 변형을 사용하여 가장 많이 사용되는 것으로 정렬할 수 있습니다.역시 성능은 거의 비슷합니다.
df = pd.DataFrame.from_records(c.most_common(), columns=['page','count'])
두 개의 열을 원할 경우 키워드 인수를 설정합니다.orient='index'
를 작성할 때DataFrame
을 사용하여 사전에서from_dict
:
final_df = pd.DataFrame.from_dict(final, orient='index')
Counter를 이미 count로 주문한 팬더 시리즈로 변형하고 주문한 아이템을 인덱스로 하는 것이 더 유용하다고 판단하여 사용하였습니다.zip
:
def counter_to_series(counter):
if not counter:
return pd.Series()
counter_as_tuples = counter.most_common(len(counter))
items, counts = zip(*counter_as_tuples)
return pd.Series(counts, index=items)
그most_common
카운터 객체의 메소드는 목록을 반환합니다.(item, count)
튜플zip
카운터에 항목이 없을 경우 예외가 발생하므로 빈 카운터를 미리 확인해야 합니다.
오류는 아마 "모든 스칼라 값을 사용할 경우 인덱스를 통과해야 합니다."일 것입니다.이 문제를 해결하려면 인덱스(예: "count")를 제공한 다음 다음 다음과 같이 전환하면 됩니다.
final_df = pd.DataFrame(final, index=['count']).transpose()
완료했습니다. 원하시는 경우 이후에 인덱스 이름을 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/31111032/transform-a-counter-object-into-a-pandas-dataframe
'programing' 카테고리의 다른 글
ntext 열에 있는 데이터 길이? (0) | 2023.10.17 |
---|---|
jquery 데이터 선택기 (0) | 2023.10.17 |
할당은 캐스트가 없는 정수에서 포인터를 만듭니다. (0) | 2023.10.12 |
c/c++ 함수의 소스 코드 (0) | 2023.10.12 |
jQuery로 HTML 태그를 제거하는 방법? (0) | 2023.10.12 |