Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/64: Рейтинг темы: голосов - 64, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.02.2018
Сообщений: 5

Pandas. Dataframe. sns.heatmap - Отрисовка результата

09.07.2020, 22:04. Показов 12139. Ответов 2

Студворк — интернет-сервис помощи студентам
Ребята, выручайте. Несколько дней голову ломаю, не могу решить проблему.В питоне я новичок.
Код пишу в Notebook Jupyter

Вообщем вот сама задача:

Task 5:
1) Разбейте расходы (отрицательные значения сумм) на 5 бакетов amount_bucket равного объёма (с помощью pd.qcut), разбив все траты на категории 'Very High', 'High', 'Middle', 'Low', 'Very Low'. (*)

2) Оставшиеся неотрицательные траты отнесите к категории 'Income'. (воспользуйтесь функцией .cat.add_categories('Income') для того, чтобы добавить новую категорию 'Income' к категориям 'Very High', 'High', 'Middle', 'Low', 'Very Low', а затем заполните пустые значения новой категорией).

3) Из поля tr_datetime выделите час tr_hour, в который произошла транзакция, как первые 2 цифры до ":". (**)

4) После этого постройте сводную таблицу, значениями в которой является пол gender, индексы - tr_hour, столбцы - amount_bucket.

5) Отрисуйте полученные результаты, передав их в функцию plot_pivot_table, расположенную ниже.

Пояснения:
(*) Обратите внимание, что в категории Very High Должны оказаться максимальные по модулю отрицательные транзакции.
(**) Например, для строки "0 10:23:26" час будет равен 10, а для строки "6 07:08:31"- 07. Можно воспользоваться функциями str.split() или str.find() и функцией .apply(lambda x: x[])

Вот то,что я написал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#Изначально имеется csv таблица с кучей записей, ее читаю во frame. Дальше все по заданию
 
otric = frame[frame.amount<0].amount
 
frame['amount_bucket'] = pd.qcut(otric,5,labels=['Very High','High','Middle','Low','Very Low'])
frame['amount_bucket'] = frame['amount_bucket'].cat.add_categories('Income').fillna('Income') 
 
hours = frame['tr_datetime'].apply(lambda x: x.split()[1].split(':')[0])
amount_bucket = frame['amount_bucket']
amount_bucket = np.array(amount_bucket.values)
gender = frame['gender']
 
 
data = {'gender' : gender.values,
        'amount_bucket' : amount_bucket}
 
frameNew = pd.DataFrame(data,index=hours.values,columns=['gender','amount_bucket'])
frameNew .gender = frameNew .gender.astype(float)
frameNew .index = frameNew .index.astype(float)
 
 
frameNew = frameNew [(frameNew .gender==1.0) | (frameNew .gender==0.0)]
 
 
def plot_pivot_table(pivot_table):
    plt.figure(figsize=(9, 11))
    sns.heatmap(pivot_table, cmap="YlGnBu", annot=True, 
                fmt='.3g', annot_kws={"size": 14, "fontsize": 14})
    plt.xticks(fontsize=15)
    plt.yticks(rotation=0, fontsize=15)
    plt.xlabel('Bucket', size=18)
    plt.ylabel('Hour', fontsize=18)
    plt.title('Gender analysis per bucket and hour', fontsize=20)
    plt.show()
 
plot_pivot_table(frameNew)
В конце выбивает ошибку : 'TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

В инете пишут,что из-за того,что один из столбцов - не число. И действительно,если убрать 'amount_bucket' отсюда frameNew = pd.DataFrame(data,index=hours.values,col umns=['gender','amount_bucket']) ,то вроде какой-то график отображается, но мне по заданию этот столбец необходим. Я без понятия что делать, вроде все по заданию сделал - но не работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2020, 22:04
Ответы с готовыми решениями:

Pandas, dataframe - добавление новых строк с сохранением результата прошлых расчетов
Здравствуйте спецы, помогите :'( Есть DataFrame: можно ли реализовать, чтобы при ручной смене 'good1' на 'good2' Результаты первого...

Dataframe pandas
Всем привет! Есть dataframe книги. Автор1 книга 1 Автор 2 книга 2 Автор 1 книга 3 Как можно сформировать xml файл с...

Pandas Dataframe
я импортирую фрейм данных из excel. Столбец 1 установлен как индекс. Я хочу проверить в индекс (Столбец 1) пустой ячейке с помощью цикла...

2
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 3
12.01.2021, 15:16
Вы не правильно строите сводную таблицу.
индексы - это часы
столбы - это значения столбца mount_bucket (low, high и т.д.)
А значения столбцов это гендер

Нужно использовать функцию pivot_table()
0
0 / 0 / 0
Регистрация: 26.01.2021
Сообщений: 1
26.01.2021, 14:55
Я тоже пока "салага".
Написал так.

df['tr_hour']=[int(s[1][:2]) for s in df['tr_datetime'].str.split(' ')]

df['amount_backet']=pd.qcut(df[df.amount<0].amount,5,labels=['Very High','High','Middle','Low','Very Low'])
df['amount_backet']=df['amount_backet'].cat.add_categories('Income').fillna('In come')

plot_pivot_table(df.pivot_table(index='t r_hour',columns='amount_backet',values=' gender'))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2021, 14:55
Помогаю со студенческими работами здесь

Pandas dataframe
Доброго дня форумчане. Возник следующий вопрос. Есть у меня таблица, которую необходимо &quot;перевернуть&quot;. Так dataframe...

Pandas. Объединить DataFrame
Приветствую всех! Коллеги, подскажите. Я спарсил xml файл с помощью xmltodict. Получил два датафрейма (пришлось делать два из-за...

Выборка в DataFrame Pandas
Подскажите пожалуйста с задачей, не выходит сделать выборку, как в задании в DataFrame Pandas. 1.Оставьте в выборке только те...

Сложные структуры Pandas DATAFRAME
Здраствуйте уважаемые знатоки! Подскажите пожалуйста способ при котором можно обработать нижеследующую структуру. Общий смысл просто...

Сравнение Dataframe через Pandas
Добрый вечер уважаемые форумчане! На данный момент нахожусь на начальном этапе обучения языка Python 3 версии. Мне необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru