将pandas datafram中的字符串datetime替换为epoch

2024-10-01 11:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧看起来像:

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列中的字符串时间戳更改为epoch(毫秒)。我可以通过在列表列表中保存值并遍历每一行来做到这一点。但我需要一种有效的方法,这样我就可以将数据帧本身的字符串时间替换为epoch时间。提前谢谢。在


Tags: 数据方法字符串dataframe列表timevalue时间
3条回答

我不知道‘epoch’对您来说是什么,但是一般来说pandas.apply函数就是您想要的。它的工作原理与map在python内置函数中的作用类似。(假设timestamp.epoch返回时间戳的epoch)

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)

我认为需要转换^{},然后转换为numpy array,并转换为int64,最后除以10**6,因为本机格式是nanoseconds:

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')

是熊猫推荐的解决方案,reference。在

示例:

^{pr2}$

输出:

                 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

相关问题 更多 >