我正在使用:
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的问题的参考。
任何人都有一个简单的修复建议,或者我需要使用其他数据类型来绘制箱形图。我想获得时间戳数据分布的单张图片。
答案 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)
这是结果:
信用归功于ImportanceOfBeingErnest,他的comment向我指出了这一解决方案。