将字符串日期时间替换为 pandas 数据框中的纪元

replace string datetime to epoch in pandas dataframe

我的数据框看起来像:

Time,User,value 2018-03-30T14:18:49.600,U101,23 2018-03-30T14:18:49.800,U102,22 2018-03-30T14:18:50.000,U101,24

我想在 DataFrame 的 Time 列中将字符串时间戳更改为以毫秒为单位的纪元。我可以通过将值保存在列表列表中并遍历每一行来做到这一点。但是我需要一种有效的方法,这样我就可以在 Dataframe 本身中将字符串时间替换为纪元时间。提前致谢。

我不知道 'epoch' 适合你,但总的来说 pandas.apply 功能是你想要的。它的工作原理类似于 map 在 python 内置函数中的作用。 (假设 timestamp.epoch returns 时间戳的纪元)

import datetime as dt 
def helper(val):
   time = dt.datetime.strptime(dtstring, '%Y-%m-%d %H:%M:%S.%f')
   return dt.epoch()
df['Time'] = df['Time'].apply(helper)

我认为需要转换 to_datetime,然后转换为 numpy array,转换为 int64,最后除以 10**6,因为本机格式在 nanosecond 中:

df['Time'] = pd.to_datetime(df['Time']).values.astype(np.int64) // 10**6
print (df)
            Time  User  value
0  1522419529600  U101     23
1  1522419529800  U102     22
2  1522419530000  U101     24
df['Time'] = (df['Time'] - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')

是pandas、reference.

的推荐方案

示例:

import pandas as pd
df = pd.DataFrame()
df['Time'] = pd.date_range('2012-10-08 18:15:05', periods=4, freq='D')
df['Epoch'] = (df['Time'] - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')
print(df)

输出:

                 Time       Epoch
0 2012-10-08 18:15:05  1349720105
1 2012-10-09 18:15:05  1349806505
2 2012-10-10 18:15:05  1349892905
3 2012-10-11 18:15:05  1349979305