Как боксировать серию Panda Timestamp серии?(Ошибки с типом метки времени) - PullRequest
0 голосов
/ 10 октября 2018

Я использую:

Панды версии 0.23.0

Python версии 3.6.5

Seaborn версии 0.81.1

Я быкак блок-график столбца данных временной метки.Мой фрейм данных не является временным рядом, индекс является просто целым числом, но я создал столбец данных Timestamp, используя:

# create a new column of time stamps corresponding to EVENT_DTM
data['EVENT_DTM_TS'] =pd.to_datetime(data.EVENT_DTM, errors='coerce')

Я отфильтровываю все значения NaT, полученные в результате принудительного вычисления.

dt_filtered_time = data[~data.EVENT_DTM_TS.isnull()]

В этот момент мои данные выглядят хорошо, и я могу подтвердить, что тип столбца EVENT_DM_TS - это отметка времени без недопустимых значений.

Наконец, чтобы сгенерировать блок-диаграмму с одной переменной, я вызываю:

ax = sns.boxplot(x=dt_filtered_time.EVENT_DTM_TS)

и получите ошибку:

TypeError: ufunc add не может использовать операнды с типами dtype ('M8 [ns]') и dtype ('M8 [ns]') *

Я гуглил и нашел:

https://github.com/pandas-dev/pandas/issues/13844 https://github.com/matplotlib/matplotlib/issues/9610

, которые, по-видимому, указывают на проблемы с представлениями типов данных.

Я также видел ссылки на проблемы с версиями панд 0.21.0.

У кого-либо есть предложения по исправлению, или мне нужно использовать другой тип данных для построения графика на диаграмме.Я хотел бы получить единую картину распределения данных временной метки.

1 Ответ

0 голосов
/ 11 октября 2018

Это код, с которым я закончил:

import time
@plt.FuncFormatter
def convert_to_date_string(x,pos):
    return time.strftime('%Y-%m',time.localtime(x))


plt.figure(figsize=(15,4))
sns.set(style='whitegrid')
temp = dt_filtered_time.EVENT_DTM_TS.astype(np.int64)/1E9
ax = sns.boxplot(x=temp)
ax.xaxis.set_major_formatter(convert_to_date_string)

Вот результат:

Box plot of times

Кредит переходит к ImportanceOfBeingErnest, чей комментарий указал мне на это решение.

...