【发布时间】:2020-08-25 11:55:37
【问题描述】:
所以,我制作了一个如下所示的 DataFrame:
DF 按日期时间对象按时间顺序排列。这些日期时间是通过将包含时间戳的列“attributes.timestamp”转换为字符串生成的:
df["DateTime"] = df["attributes.timestamp"].apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ'))
相应的 y 值是一个计数器,用于对相应分钟内的对象进行计数。 当我尝试在 matplotlib 中绘制这个 DF 时,它确实有效。它将日期时间对象作为 x 值并绘制该分钟的计数,如下所示:
当然,必须在 x 轴上显示完整的 DateTime 对象看起来很愚蠢。它按此顺序显示月、日和小时(在示例中是 3 月 2 日下午 2 点到 20 点)。我希望它只显示小时(或至少只显示时间,而不是随之而来的整个日期)。所以我尝试向 DF 添加一个新列(称为“时间”)。该列将使用以下代码从 DateTime 列中提取时间:
df["Time"] = df["DateTime"].time()
但是,这不起作用,因为它给了我属性错误“'Series' object has no attribute 'time'”。相反,我尝试了其他方法。当我生成 DateTime 对象并向其中添加“.time()”时,我只是重复了之前使用的整个代码。
df["Time"] = df["attributes.timestamp"].apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ').time())
我不知道为什么,但现在它工作得很好。我能够从我的 Datetime 对象中添加时间:
我的下一个想法是使用 x 轴上的“时间”列而不是整个日期时间进行绘图。来自计数器的 y 值保持不变。但由于某种原因,这不起作用。当我尝试这样绘制它时,它给了我以下错误: TypeError: float() argument must be a string or a number, not 'datetime.time' 奇怪的是,在使用整个 DateTime 对象进行绘图时没有问题。我不知道,为什么提取的时间会成为问题,因为它也是按时间顺序排列的值。
我的问题是:为什么我的方法不起作用?并且:有什么办法可以解决这个问题吗?
【问题讨论】:
-
df["Time"] = df["DateTime"].dt.time -
确实也提取了时间。在 x 轴上绘制它时,它仍然给我同样的错误:TypeError: float() argument must be a string or a number, not 'datetime.time'
-
该 api 不是为处理 datetime.time 而构建的
标签: python pandas dataframe datetime matplotlib