将纪元转换为日期时间格式 python - 类型错误

convert epoch to datetime format python - typeerror

我有一个包含 2 列的数据框 - 一些值和时间。时间戳采用纪元时间格式,我正在尝试使用 python 中时间库中的 strftime 函数进行转换。

这是一些样本数据

df = [{'A': 762, 'Time': 1512255906},
      {'A': 810, 'Time': 1480719906}]

注意:时间为纪元格式。我正在执行一些转换以确保它是 numeric(float) 类型,然后再通过 strftime 函数进行日期转换。

代码如下:

df['Time'] = pd.to_numeric(df['Time'], errors='coerce').fillna(0)
df['Time'].dtype

我在这条线上收到错误

df['Time'] = time.strftime("%d-%m", time.localtime(df['Time']))

回溯:

TypeError   Traceback (most recent call last)
<ipython-input-53-86f4db0b80e4> in <module>()
 ----> 1 df['Time'] = time.strftime("%d-%m", time.localtime(df['Time']))

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

您可以使用 pandas.DataFrame.apply:

>>> import pandas as pd
>>> import time

>>> df = pd.DataFrame([{'A': 762, 'Time': 1512255906},
                       {'A': 810, 'Time': 1480719906}])

>>> df['Time'] = pd.to_numeric(df['Time'], errors='coerce').fillna(0)
>>> df['Time'] = df['Time'].apply(lambda t: time.strftime("%d-%m", time.localtime(t)))

>>> df
     A   Time
0  762  03-12
1  810  03-12

您可以为 pd.to_datetime 传递一个 unit 参数,以了解该数字应该代表的时间单位。在这种情况下,您从 Time 开始,距纪元的秒数​​。所以我们将 's' 作为 unit.

df.assign(Time=pd.to_datetime(df.Time, unit='s').dt.strftime('%d-%m'))
# For in place, use:
# df.Time = pd.to_datetime(df.Time, unit='s').dt.strftime('%d-%m')

     A   Time
0  762  02-12
1  810  02-12