python - 使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间

标签 python datetime pandas matplotlib time

我的数据框中有一列以 HH:MM:SS 格式列出时间。当我在该列上运行 dtype 时,它​​会出现 dtype('o') 并且我希望能够将它用作 x-axis 来绘制一些我的其他信号。我看到了以前关于使用 to_datetime 的文档,并尝试使用它将其转换为 matplotlib 可用的时间格式。

使用的 pandas 版本是 0.18.1

我用过:

time=pd.to_datetime(df.Time,format='%H:%M:%S')

然后输出变成:

time
0       1900-01-01 00:00:01 

并对列中的其余数据点执行。

即使我只指定了小时、分钟和秒,我仍然得到日期。这是为什么?我也试过了

time.hour()

只是为了提取小时部分,但随后我收到一个错误,指出它没有“小时”属性。

非常感谢任何帮助!谢谢! Sample data in image

最佳答案

现在是 2019 年,使用 pandas 0.25.0 和 Python 3.7.3。

(注意:已编辑答案以考虑绘图)

Even though I specified just hour,minutes,and seconds I am still getting date. Why is that?

根据 pandas documentation我认为这是因为在 pandas Timestamp(相当于 Datetime)对象中,参数年、月和日强制性,而时、分和秒 em> 是可选的。 因此,如果您在 Datetime 中转换对象类型的对象,它必须有年-月-日部分 - 如果您不指定,它将是默认的 1900-01 -01.

由于您的样本中还有一个日期列,您可以使用它来创建一个日期时间列,其中包含您可以用来绘制的正确日期:

import pandas as pd

df['Time'] = df.Date + " " + df.Time
df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M:%S')

df.plot('Time', subplots=True)

有了这个,您的“时间”列将显示如下值:2016-07-25 01:12:07,其数据类型为 datetime64[ns]。

话虽这么说,如果您逐日绘制并且只想比较一天内的时间(而不是日期+时间),那么拥有默认日期似乎并不麻烦,只要它在所有时间都是相同的日期 -时间将在同一天正确比较,即使是错误的。

在最不可能的情况下,您仍然需要一个时间列,this is the reverse operation :

import pandas as pd

df['Time-only'] = pd.to_datetime(df['Time'], format='%H:%M:%S').dt.time

如前所述,它没有日期(年-月-日),因此它不能是日期时间对象,因此此列将采用对象格式

关于python - 使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41447401/

相关文章:

python - 解释测试用例中使用的 "setUp"和 "tearDown"Python方法

c++ - 获得绝对时间的更好方法?

python - Pandas transform ('unique' ) 输出为逗号分隔字符串而不是列表

python - 编辑文档中的文本

python - 如何根据 PlaceID 列出 ave_ rating,取其平均值并分配给所有具有 PlaceID 的 PlaceID。

python - 如何正确地将 numpy vectorize 转换为 numba vectorize

java - 使用 Joda-Time 倒数圣诞节

python - 不支持的格式字符 'm'

python - 为行中的每个值创建一个新列

python - pandas:根据具有重复值的另一列填充 nan 值