当前位置: 首页 > 面试题库 >

在Python Pandas DataFrame中将timedelta64 [ns]列转换为秒

艾修筠
2023-03-14
问题内容

一个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]]

问题答案:

在当前版本的Pandas(版本0.14)中,这可以正常工作:

In [132]: df[:5]['duration'] / np.timedelta64(1, 's')
Out[132]: 
0    1232
1    1390
2    1495
3     797
4    1132
Name: duration, dtype: float64

这是较旧版本的Pandas / NumPy的解决方法:

In [131]: df[:5]['duration'].values.view('<i8')/10**9
Out[131]: array([1232, 1390, 1495,  797, 1132], dtype=int64)

timedelta64和datetime64数据在内部存储为8字节整数(dtype
'<i8')。因此,以上将timedelta64s视为8字节整数,然后进行整数除法将纳秒转换为秒。

请注意,您需要NumPy 1.7或更高版本才能使用datetime64 / timedelta64s。



 类似资料:
  • 问题内容: 我有以下Python pandas数据框: 我想要: 我看过pivot(),pivot_table(),Transpose和unstack(),它们似乎都没有给我。熊猫新手,所以所有帮助表示赞赏。 问题答案: 您需要通过转置: 如果需要重命名列,则有点复杂: 另一个更快的解决方案是使用: 时间 :

  • 问题内容: 我试图将列从数据类型转换为使用: 但出现错误: NameError:未定义名称“ int64” 专栏有人数,但其格式为:我知道如何将其更改为? 问题答案: 大熊猫 0.24+的 解决方案,用于转换缺少值的数字: ValueError:无法将非限定值(NA或inf)转换为整数 我认为您需要转换为: 样品: 如果某些S IN列需要他们取代一些(例如)通过,因为的是: 同时检查文档-缺少数据

  • 我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。

  • 问题内容: 假设我a在Python中有一个列表,其条目方便地映射到字典。每个偶数元素代表字典的键,后面的奇数元素是值 例如, 我想将其转换为字典b, 语法上最干净的方法是什么? 问题答案: 如果很大,则可能需要执行以下操作,而不会像上面那样创建任何临时列表。 在Python 3中,您也可以使用理解,但具有讽刺意味的是,我认为最简单的方法是使用,通常是代码味道。 因此,尽管EOL在注释中指出,该方法

  • 请考虑下表:对于每个代码,每一个状态都有一些值。 现在我想以这样的方式转置表,使成为列: 我不能让它工作,只转置那个特定的列。 在熊猫身上实现这一目标的好办法是什么?

  • 我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。