我的数据框中有一列以 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()
只是为了提取小时部分,但随后我收到一个错误,指出它没有“小时”属性。
最佳答案
现在是 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/