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

时间:2017-01-03 15:57:20

标签: 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

2 个答案:

答案 0 :(得分:2)

您可以提取time对象,如:

import pandas as pd

df = pd.DataFrame([['12:10:20']], columns={"time": "item"})
time = pd.to_datetime(df.time, format='%H:%M:%S').dt.time[0]

之后,您可以提取所需的属性:

hour = time.hour

Source

答案 1 :(得分:0)

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

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

  

即使我仅指定了小时,分钟和秒,我仍然可以获取日期。为什么会这样?

根据pandas documentation,我认为这是因为在熊猫Timestamp(等效于Datetime)对象中,参数 year,month和day 强制性,而小时,分钟和秒是可选的。 因此,如果您在日期时间中转换对象类型的对象,则它必须有一个年月日部分-如果您未指定,则将是默认的1900-01-01

由于示例中还具有日期列,因此可以使用它来绘制具有正确日期的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)

使用此方法,您的“时间”列将显示类似2016-07-25 01:12:07的值,其dtype为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

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