pandas 从日期时间转换为整数时间戳

pandas convert from datetime to integer timestamp

考虑到 python 中的 pandas 数据帧有一个名为 time 的整数类型的列,我可以使用以下指令将其转换为 datetime 格式。

df['time'] = pandas.to_datetime(df['time'], unit='s')

所以现在该列包含如下条目:2019-01-15 13:25:43

将字符串恢复为整数时间戳值(表示从 1970-01-01 00:00:00 开始经过的秒数)的命令是什么?

我检查了 pandas.Timestamp 但找不到转换实用程序,我无法为此使用 pandas.to_timedelta

这个转换有什么实用工具吗?

您可以使用 astype(int) 类型转换为 int 并将其除以 10**9 以获得到 unix 纪元开始的秒数。

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})
df_unix_sec = pd.to_datetime(df['time']).astype(int)/ 10**9
print(df_unix_sec)

timedelta64 上使用 .dt.total_seconds():

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})

# pd.to_timedelta(df.time).dt.total_seconds() # Is deprecated
(df.time - pd.to_datetime('1970-01-01')).dt.total_seconds()

输出

0    1.547559e+09
Name: time, dtype: float64

最简单的方法是使用.value

pd.to_datetime('1970-01-01').value

如果你想将它应用到整个列,只需使用 .apply:

df['time'] = df['time'].apply(lambda x: x.value)

正如@Ignacio 所推荐的,这就是我用来转换为整数的内容:

df['time'] = df['time'].apply(lambda x: x.value)

然后,取回:

df['time'] = df['time'].apply(pd.Timestamp)

也可以使用.view(...):

import pandas as pd
df = pd.DataFrame({'time': [pd.to_datetime('2019-01-15 13:25:43')]})
df_unix_sec = pd.to_datetime(df['time']).view(int) // 10 ** 9
print(df_unix_sec)

上面推荐的 .astype(int) 的转换是 deprecated in pandas 1.3.0,并抛出警告:

FutureWarning: casting datetime64[ns] values to int64 with .astype(...) is deprecated and will raise in a future version. Use .view(...) instead.