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.
考虑到 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.