【发布时间】:2018-02-04 03:34:00
【问题描述】:
我正在尝试绘制一个系列(准确地说是数据框中的列)。它似乎具有 hh:mm:ss (timedelta64) 格式的有效数据
In [14]: x5.task_a.describe()
Out[14]:
count 165
mean 0 days 03:35:41.121212
std 0 days 07:07:40.950819
min 0 days 00:00:06
25% 0 days 00:37:13
50% 0 days 01:28:17
75% 0 days 03:41:32
max 2 days 12:32:26
Name: task_a, dtype: object
In [15]: x5.task_a.head()
Out[15]:
wbdqueue_id
26868 00:26:11
26869 02:08:28
26872 00:26:07
26874 00:48:22
26875 00:26:17
Name: task_a, dtype: timedelta64[ns]
但是当我尝试绘制它时,我收到一条错误消息,指出空的“DataFrame”中没有数字数据。 我试过了: x5.task_a.plot.kde() 和 x5.plot() 其中 x5 是具有多个此类 timedelta 数据系列的 DataFrame。
TypeError: Empty 'DataFrame': no numeric data to plot
我发现可以生成一系列随机值并将其绘制出来。
我做错了什么?
【问题讨论】:
-
Pandas 无法绘制非数字数据。
x5.task_a列不是timedelta,而是一个字符串(否则,x5.task_a.describe()会将其报告为timedelta64,而不是object)。解决方法是将列转换为日期时间格式。 -
@DYZ,我相信它在 timedelta 中有两个原因:(1)当我尝试将其更改为 datetime 时(x.task_a=x5.task_a.apply(pd.datetime) 我明白了错误:TypeError:
is not convertible to datetime and (2) x5.task_a.head(), above, 表明内容是 timedelta64 类型的。 -
@DYZ 我遇到了同样的错误,而且我的也是 pandas timedelta:当我查看
print(joyData.timeTaken.dtype)时,我得到了timedelta64[ns]。 -
仅供参考:有一个github issue 关于这个。
-
试试
(x5.task_a / np.timedelta64(1, 'h')).plot.kde()?