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

Tim*_*ice 2 python time datetime matplotlib pandas

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

使用的熊猫版本是 0.18.1

我用了:

time=pd.to_datetime(df.Time,format='%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

然后输出变为:

time
0       1900-01-01 00:00:01 
Run Code Online (Sandbox Code Playgroud)

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

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

time.hour()
Run Code Online (Sandbox Code Playgroud)

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

任何帮助深表感谢!谢谢! 图像中的样本数据

Tod*_*mon 5

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

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

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

根据熊猫文档,我认为这是因为在熊猫时间戳(相当于日期时间)对象中,参数年、月和日强制性的,而小时、分钟和秒是可选的。因此,如果您在 Datetime 中转换对象类型对象,则它必须具有年-月-日部分- 如果您不指定,它将是默认的1900-01-01.

由于您的示例中还有一个 Date 列,您可以使用它来创建一个带有正确日期的 datetime 列,您可以用它来绘制:

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)
Run Code Online (Sandbox Code Playgroud)

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

话虽如此,如果您每天都在绘制并且只想比较一天内的时间(而不是日期+时间),那么只要所有时间都是相同的日期,默认日期似乎并不麻烦 - 时间会在同一天正确比较,无论是错误的。

在最不可能的情况下,您仍然需要一个仅限时间的列,这是相反的操作

import pandas as pd

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

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