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)
只是为了提取小时部分,但后来我收到一个错误,说它没有“小时”属性。
现在在 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 格式。
| 归档时间: |
|
| 查看次数: |
7394 次 |
| 最近记录: |