pandas DataFrame列duration
包含timedelta64[ns]
,如图所示。如何将它们转换为秒?
0 00:20:32
1 00:23:10
2 00:24:55
3 00:13:17
4 00:18:52
Name: duration, dtype: timedelta64[ns]
我尝试了以下方法
print df[:5]['duration'] / np.timedelta64(1, 's')
但得到的错误
Traceback (most recent call last):
File "test.py", line 16, in <module>
print df[0:5]['duration'] / np.timedelta64(1, 's')
File "C:\Python27\lib\site-packages\pandas\core\series.py", line 130, in wrapper
"addition and subtraction, but the operator [%s] was passed" % name)
TypeError: can only operate on a timedeltas for addition and subtraction, but the operator [__div__] was passed
还试图
print df[:5]['duration'].astype('timedelta64[s]')
但是收到了错误
Traceback (most recent call last):
File "test.py", line 17, in <module>
print df[:5]['duration'].astype('timedelta64[s]')
File "C:\Python27\lib\site-packages\pandas\core\series.py", line 934, in astype
values = com._astype_nansafe(self.values, dtype)
File "C:\Python27\lib\site-packages\pandas\core\common.py", line 1653, in _astype_nansafe
raise TypeError("cannot astype a timedelta from [%s] to [%s]" % (arr.dtype,dtype))
TypeError: cannot astype a timedelta from [timedelta64[ns]] to [timedelta64[s]]
6条答案
按热度按时间fnx2tebb1#
使用Series dt访问器可以访问datetime(timedelta)系列的方法和属性。
对于String、Categorical和Sparse数据类型,还有其他Pandas系列访问器。
jchrr9hc2#
这在当前版本的Pandas(版本0.14)中正常工作:
以下是旧版本Pandas/NumPy的解决方案:
timedelta 64和datetime 64数据在内部存储为8字节整数(dtype
'<i8'
)。因此,上面的代码将timedelta 64视为8字节整数,然后进行整数除法将纳秒转换为秒。请注意,您需要NumPy版本1.7或更高版本才能使用datetime 64/timedelta 64 s。
w1jd8yoj3#
刚刚意识到这是一个老线程,无论如何,如果像我这样的流浪者只点击搜索引擎上的前5名结果,并在这里结束,就把它留在这里。
确保你的类型是正确的。
linear_df['duration'].dt.hour*3600 + linear_df['duration'].dt.minute*60 + linear_df['duration'].dt.second
linear_df[:5]['duration'].astype('timedelta64[s]')
我让它像这样工作:
start_dt和end_dt列的格式如下:
我的持续时间是timedelta 64 [ns]格式的,它是start和enddatetime值的减法。
生成的持续时间列如下所示
使用pandas,我将两个日期之间的持续时间设置为浮点数。更容易比较或过滤您的持续时间。
在我的情况下,如果我想得到所有的持续时间,这是超过1秒。
flmtquvp4#
使用'total_seconds()'函数:
4smxwvx55#
我们可以简单地使用pandas**apply()**函数
vaqhlq816#
答案并不适合年龄。这里有一个更简单的解决方案:
df.duration.dt.total_seconds()