如何装箱熊猫时间戳系列? (时间戳类型错误)

时间:2018-10-10 18:36:16

标签: pandas matplotlib timestamp seaborn boxplot

我正在使用:

Pandas版本0.23.0

Python版本3.6.5

Seaborn版本0.81.1

我想要一列Timestamp数据的Box Plot。我的数据帧不是时间序列,索引只是一个整数,但是我使用以下方法创建了一列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列的类型为Timestamp,没有无效值。

最后生成我调用的单个变量箱图:

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

并得到错误:

  

TypeError:ufunc add无法使用类型为dtype('M8 [ns]')和dtype('M8 [ns]')的操作数

我已经Google搜索并找到了

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

似乎表明数据类型表示存在问题。

我还看到了有关熊猫版本0.21.0的问题的参考。

任何人都有一个简单的修复建议,或者我需要使用其他数据类型来绘制箱形图。我想获得时间戳数据分布的单张图片。

1 个答案:

答案 0 :(得分:1)

这是我最终得到的代码:

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,他的comment向我指出了这一解决方案。