首页 > 解决方案 > 如何将“float64”转换为熊猫数据框中的时间戳

问题描述

这是我的数据

id enter_time
1  1.481044e+12
2  1.486d74e+12

这是我的预期输出

id enter_time     enter_timestamp
1  1.481044e+12   2017-07-14 08:10:03
2  1.486774e+12   2017-07-15 08:10:00

注意:上面预期的“enter_timestamp”中的值是假的,它只是为了给出预期格式的想法,下面是额外的信息,以防需要回答

In : main['enter_time'].dtype
Out: dtype('float64')

我已经尝试过的

import datetime
main['loan_timestamp'] = datetime.datetime.fromtimestamp(main['loan_time'])

和输出

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-cfe2d514debb> in <module>
      1 import datetime
----> 2 main['loan_timestamp'] = datetime.datetime.fromtimestamp(main['loan_time'])

/opt/conda/lib/python3.8/site-packages/pandas/core/series.py in wrapper(self)
    127         if len(self) == 1:
    128             return converter(self.iloc[0])
--> 129         raise TypeError(f"cannot convert the series to {converter}")
    130 
    131     wrapper.__name__ = f"__{converter.__name__}__"

TypeError: cannot convert the series to <class 'int'>

标签: pythonpandasdataframetimestamp

解决方案


尝试使用 pandas to_datetime() (我假设您的第二个输入浮点数中的字符 'd' 是一个错字,所以我替换了它):

import pandas as pd

df = pd.DataFrame([(1, 1.481044e+12), (2, 1.48674e+12)], columns=['id', 'enter_time'])
df['enter_timestamp'] = pd.to_datetime(df['enter_time'], unit='ms')
df

    id  enter_time  enter_timestamp
0   1   1.481044e+12    2016-12-06 17:06:40
1   2   1.486740e+12    2017-02-10 15:20:00

我假设 enter_time 的单位是毫秒,因为秒或更高会导致 OutOfBoundsError (熊猫时间戳的基本限制)。


推荐阅读