как сделать гистограмму в pandas v1.0 - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь визуализировать общее количество вызовов, совершенных за промежуток времени, где x - это месяц, а y - сумма всех вызовов, совершенных за этот период.

У меня есть Основной DataFrame df1 с различными столбцами, где я беру два столбца со значениями 'date' и 'duration' и повторяю выборку за месячный период:

df2 = df1[['date', 'duration']]

monthly_df2 = df2.set_index('date').resample('M').sum()

Я могу получить хороший DataFrame с нужными мне данными:

2018-10-31  03:03:34
2018-11-30  03:22:21
2018-12-31  04:31:56
2019-01-31  04:02:31

Проблема начинается, когда я хочу построить эти данные:

  1. Если Я использую метод plot () напрямую для передискретизации DataFrame. Я могу получить линейный график, где значение y отображается в наносекундах, поэтому значение 03:03:34 преобразуется в 11014000000000 и т. Д.

  2. Когда я использую метод .plot.bar (), у меня есть:

TypeError: Передача целых чисел в fillna для timedelta64 [ns] dtype больше не поддерживается. Чтобы получить старое поведение, вместо этого передайте pd.Timedelta(seconds=n).

Я просматривал переполнение стека и другие ресурсы, но все решения для гистограмм были опубликованы до того, как pandas v1.0 был выпущен и у меня также есть TypeError, если я использую эти решения.

Они изменили его на концепцию Timedelta, но я не могу понять, как я могу использовать его в моей ситуации: Timedelta

Может ли кто-нибудь предложить мне хороший способ преодоления этой проблемы

1 Ответ

1 голос
/ 02 мая 2020

Это более правильное название для моего вопроса Сюжет datetime.timedelta с использованием matplotlib и python и решение, которое также можно найти в этом посте: решение .

Для краткости просто измените dtype вашего столбца на .astype('timedelta64[m]'). Вы можете изменить часы, минуты или секунды для вашего случая, просто изменив значение в квадратных скобках. Это меняет dtype вашего y column на float64, и тогда вы можете легко построить гистограмму или график с обычными единицами, а не с наносекундами

...