我的数据框中有一列列出了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()
只是为了提取小时部分但是我得到一个错误,它没有一个小时'属性。
答案 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
如前所述,它没有日期(年-月-日),因此它不能是日期时间对象,因此此列将采用对象格式。