Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как представить python-словарь в виде таблицы

#python #python_3x #словари


Столкнулся с необходимостью представить python словарь (dictionary) в какую-либо
таблицу(может быть в базу данных, или еще как). подскажите, как лучше это осуществить?
И, может быть данные лучше хранить данные не в  словаре, а в Series?

import pandas as pd
import pymysql
import numpy as np


db = pymysql.connect(host='localhost', user='root', passwd='',
                  database='mom_db', charset='utf8')
df = pd.read_sql("SELECT * FROM comments ", db)
cursor = db.cursor()

name = df['nickname']

count = pd.value_counts(name)

a = {count.index[i]:count[i] for i in range(len(count))}
print(a)
#print(count[count>1])-вывод Series


выводит:

{'repeinik': 26, 'podberezowik': 24, 'Павел_Шуков_talks48': 20, 'stupich': 
14, 'kipovets': 14, 'Лайош_Портиш': 13, 'vijigau_mraz': 13, 'наивная баба': 
12, 'genek77': 12, 'Sergey_Petrov': 12, 'Андрей_Иванов_talks19': 11, 
'Пачотны тунеядзец': 10, 'eugenenus_': 10, 'Настя_Романова': 9, 'Kac_Lol': 
9, 'Ириша_Лалапусечка': 9, 'valstar78': 8, 'Сергей Александрович': 8, 
'Tadeush_Тадеуш': 8, 'freedom for us': 7, 'Светлана_Малышкина': 7, 
'Костя_Миронов': 7, 'SIgarA': 6, 'Жанна_Д-урк': 6, 'Fair play': 6, 
'Лукашенко_Федор': 6, 'Lisa_Grodno': 5, 'id350886439': 5,......


и если выводить Series:

repeinik                  26
podberezowik              24
Павел_Шуков_talks48       20
stupich                   14
kipovets                  14
Лайош_Портиш              13
.......

    


Ответы

Ответ 1



Мне вот у модуля tabulate нравятся таблицы (а через параметр tablefmt можно разные стили задавать): # pip install tabulate from tabulate import tabulate d = {'repeinik': 26, 'podberezowik': 24, 'Павел_Шуков_talks48': 20, 'stupich': 14, 'kipovets': 14, 'Лайош_Портиш': 13, 'vijigau_mraz': 13, 'наивная баба': 12, 'genek77': 12} print(tabulate(d.items(), headers=['NAME', 'VALUE'], tablefmt="grid")) Консоль: +---------------------+---------+ | NAME | VALUE | +=====================+=========+ | repeinik | 26 | +---------------------+---------+ | podberezowik | 24 | +---------------------+---------+ | Павел_Шуков_talks48 | 20 | +---------------------+---------+ | stupich | 14 | +---------------------+---------+ | kipovets | 14 | +---------------------+---------+ | Лайош_Портиш | 13 | +---------------------+---------+ | vijigau_mraz | 13 | +---------------------+---------+ | наивная баба | 12 | +---------------------+---------+ | genek77 | 12 | +---------------------+---------+

Ответ 2



d = {'repeinik': 26, 'podberezowik': 24, 'Павел_Шуков_talks48': 20, 'stupich': 14, 'kipovets': 14, 'Лайош_Портиш': 13, 'vijigau_mraz': 13, 'наивная баба': 12, 'genek77': 12} print("{:<20} {:<15}".format('Name','Value')) for v in d.items(): name, val = v print("{:<20} {:<15}".format(name, val)) Результат Name Value repeinik 26 podberezowik 24 Павел_Шуков_talks48 20 ... ... Похожий вопрос на SO: https://stackoverflow.com/questions/17330139/python-printing-a-dictionary-as-a-horizontal-table-with-headers

Ответ 3



print('{:<20} {:<15}'.format('NickName', 'Numb_comm')) for name, n_comm in a.items(): print('{:<20} {:<15}'.format(name, n_comm)) результат NickName Numb_comm repeinik 26 podberezowik 24 Павел_Шуков_talks48 20 stupich 14 kipovets 14 Лайош_Портиш 13 vijigau_mraz 13 наивная баба 12 genek77 12

Ответ 4



В вашем случае будет выгоднее сделать группировку на стороне MySQL сервера, чтобы не тащить все данные с сервера: select name, cnt from ( select name, count(*) as cnt from tab group by name order by cnt desc ) as v limit 3; Тест на SQLFiddle и потом просто прочитать результат данного SQL в DataFrame Если делать это средствами Pandas: Тестовый набор случайных данных с неравномерным распределением: In [63]: df = pd.DataFrame({ ...: 'name':np.random.choice(['aaa','bbb','ccc', 'ddd', 'eee', 'fff'], 100, p=[0.4, .13, .15, .05, .2, .07]) ...: }) ...: ...: PS тот же набор данных я использовал для SQLFiddle... Выбираем top 3: In [69]: df['name'].value_counts().iloc[:3].reset_index(name='cnt').rename(columns={'index':'name'}) Out[69]: name cnt 0 aaa 45 1 eee 19 2 ccc 13

Комментариев нет:

Отправить комментарий