Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';Pandas或numpy中是否有合适的datetime.time类型?_Python_Numpy_Pandas - Fatal编程技术网

Python 为什么不是';Pandas或numpy中是否有合适的datetime.time类型?

Python 为什么不是';Pandas或numpy中是否有合适的datetime.time类型?,python,numpy,pandas,Python,Numpy,Pandas,我有一个数据集,上面有人们上班的出发时间和到达工作地点的时间。由于人们通常在每个工作日上班,所以显然不需要与数据关联的日期。我每个工作日早上8点上班,每个工作日下午5点回来 类似地,对于学校、办公室等,有许多地方的日期与时间没有多大关系。反之亦然,时间不如日期重要。回到我的问题上来 我的时间编码为历元,转换为日期时间非常简单: In [1]: df['time'] = pd.to_datetime(df['time'], unit='m') df['time'].head(3)

我有一个数据集,上面有人们上班的出发时间和到达工作地点的时间。由于人们通常在每个工作日上班,所以显然不需要与数据关联的日期。我每个工作日早上8点上班,每个工作日下午5点回来

类似地,对于学校、办公室等,有许多地方的日期与时间没有多大关系。反之亦然,时间不如日期重要。回到我的问题上来

我的时间编码为历元,转换为日期时间非常简单:

In [1]: df['time'] = pd.to_datetime(df['time'], unit='m')
        df['time'].head(3)
Out[1]: 0    1970-01-01 06:15:00
        1    1970-01-01 06:17:00
        2    1970-01-01 08:10:00
        Name: time, dtype: datetime64[ns]
但是里面有讨厌的
1970-01-01
。我想摆脱它:

In [2]: df['time'].dt.time.head(3)
Out[2]: 0    06:15:00
        1    06:17:00
        2    08:10:00
        Name: time, dtype: object
现在它被转换成
对象
,这比拥有
1970-01-01
还要麻烦,因为我不能做以下事情:

In [3]: df['time'].dt.time + pd.to_timedelta(df['travel'], unit='m')
Out[3]: ---------------------------------------------------------------------
        TypeError                           Traceback (most recent call last)
        < whole bunch of tracebacks. I know what's going on here >
        TypeError: ufunc subtract cannot use operands with types dtype('O') and dtype('<m8[ns]')
故事在这本书中重复。有许多示例只包含日期组件,但没有一个示例只包含时间组件


为什么不爱把纯粹的时间储存在一个可操纵的格式中?我是否必须将所有数据转换成Python本机的
datetime.time
类型(这会让我丧命,因为我要处理数十亿行)?我要寻找的是一种仅以可操作格式存储时间组件的方法。一个向这个方向发光的答案将被接受。

因为@unutbu没有发布这个问题的答案,只是对它发表了评论,我将发布有效的答案,并接受它作为答案。如果稍后@unutbu发布了答案,我将接受

基本上,正如我在问题中提到的,datetime的日期部分对我来说并不重要。因此,最简单的解决方案是先进行算术运算,然后获得正确的时间:

(df['time'] + pd.to_timedelta(df['travel'], unit='m')).dt.time

因为,@unutbu没有发布这个问题的答案,只是对它发表了评论,我将发布有效的内容,并接受它作为答案。如果稍后@unutbu发布了答案,我将接受

基本上,正如我在问题中提到的,datetime的日期部分对我来说并不重要。因此,最简单的解决方案是先进行算术运算,然后获得正确的时间:

(df['time'] + pd.to_timedelta(df['travel'], unit='m')).dt.time

您需要首先定义您想要的行为。即使转换为Python的本机
datetime.time
也不会有帮助,因为
time
plus
timedelta
会引发类型错误。对。我忘了那一点。老实说,我不知道如何处理我的情况。谢谢,@unutbu。事实上,很明显:我应该绕过去。因为当一个人去做常规工作时,他不看日期。因此,如果在23:45:00出发,并在30分钟内到达工作场所,那么无论日期如何,此人都会在00:15:00到达。再次感谢@unutbu提醒我在时间对象上执行算术的难题。如果您愿意,那么您可以将您的评论作为答案发布,并建议先进行算术运算,然后根据需要转换为时间对象。这是这个问题的最佳答案,我会接受的。你需要先定义你想要的行为。即使转换为Python的本机
datetime.time
也不会有帮助,因为
time
plus
timedelta
会引发类型错误。对。我忘了那一点。老实说,我不知道如何处理我的情况。谢谢,@unutbu。事实上,很明显:我应该绕过去。因为当一个人去做常规工作时,他不看日期。因此,如果在23:45:00出发,并在30分钟内到达工作场所,那么无论日期如何,此人都会在00:15:00到达。再次感谢@unutbu提醒我在时间对象上执行算术的难题。如果您愿意,那么您可以将您的评论作为答案发布,并建议先进行算术运算,然后根据需要转换为时间对象。这是这个问题的最佳答案,我会接受的。