使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间
Posted
技术标签:
【中文标题】使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间【英文标题】:Convert Python object column in dataframe to time without date using Pandas 【发布时间】:2017-05-17 18:35:53 【问题描述】:我的数据框中有一列列出了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()
只是为了提取小时部分,然后我收到一个错误,它没有“小时”属性。
非常感谢任何帮助!谢谢!
【问题讨论】:
能否分享示例数据 Python/Pandas convert string to time only的可能重复 【参考方案1】:您可以像这样提取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)
【讨论】:
给我更多错误 TypeError Traceback (最近一次调用最后) C:\Users\a421835\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\tseries\tools.py in _convert_listlike (参数、框、格式、名称) 408 try: --> 409 个值,tz = tslib.datetime_to_datetime64(arg) 410 返回 DatetimeIndex._simple_new(values, name=name, tz=tz) pandas\tslib.pyx in pandas.tslib .datetime_to_datetime64 (pandas\tslib.c:29768)() TypeError: Unrecognized value type:现在是 2019 年,使用 pandas 0.25.0 和 Python 3.7.3。
(注意:已编辑答案以考虑绘图)
即使我只指定了小时、分钟和秒,我仍然得到日期。这是为什么呢?
根据pandas documentation 我认为这是因为在pandas Timestamp(相当于Datetime)对象中,参数年月日是强制,而小时、分钟和秒是可选的。
因此,如果您在 Datetime 中转换您的对象类型对象,它必须具有年-月-日部分 - 如果您不指定,它将是默认的 1900-01-01
。 p>
由于您的示例中还有一个日期列,因此您可以使用它来创建一个日期时间列,其中包含可用于绘制的正确日期:
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
如前所述,它没有日期(年-月-日),因此不能是日期时间对象,因此此列将采用对象格式。
【讨论】:
是的,只要您有更多/新/正确的信息要提供,就可以编辑自己的答案。所以结论是,由于涉及绘图,它不是重复的。我建议我们删除这些不再需要的 cmets。以上是关于使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期
Python Pandas 如何将 groupby 操作结果分配回父数据框中的列?