【问题标题】:Converting timestamp column in custom string format to seconds in python在python中将自定义字符串格式的时间戳列转换为秒
【发布时间】:2021-03-16 05:18:56
【问题描述】:

我有一个带有多个列的 pandas 数据框,其中包含字符串格式的时间戳值。这些值类似于“0D_0H_1M_35S_0MS”。我想将所有这些列值转换为毫秒

【问题讨论】:

  • 不要粘贴截图。共享要复制的数据。

标签: python pandas string datetime


【解决方案1】:

首先将字符串替换为格式,以便在DataFrame.apply 的自定义函数中将Series.replace 转换为timedeltas,Series.dt.total_seconds 转换为秒,1000 转换为多个毫秒数:

cols = ['date','date1']

def parse(x):
    s =  x.replace({'D_':' Days ','H_':':','M_':':','S_':'.','MS':''}, regex=True)
    return pd.to_timedelta(s).dt.total_seconds().mul(1000).astype(int)
    
df[cols] = df[cols].apply(parse)
print (df)
     date   date1
0   95000   95000
1  155000  155000

如果格式永远不会改变,则可以通过Series.str.extractall 提取数字,然后通过Series.unstack 重塑,转换为整数和按单位系列的倍数,最后一个总和值。

解决方案的灵感来自于已删除的答案。

df = pd.DataFrame({'date':['0D_0H_1M_35S_0MS','0D_0H_2M_35S_0MS'],
                   'date1':['0D_0H_1M_35S_0MS','0D_0H_2M_35S_0MS']})

cols = ['date','date1']

def parse(x):
    a = pd.Series([86400000, 3600000, 60000, 1000, 1])
    return x.str.extractall('(\d+)')[0].unstack().astype(int).mul(a).sum(axis=1)
    
df[cols] = df[cols].apply(parse)

print (df)
     date   date1
0   95000   95000
1  155000  155000

【讨论】:

  • 谢谢。这适用于单个列。您能帮我一次性完成所有此类列吗?
猜你喜欢
  • 2014-11-27
  • 2023-03-27
  • 2021-04-13
  • 1970-01-01
  • 2013-10-28
  • 2011-05-07
  • 2016-03-08
  • 2017-02-23
  • 1970-01-01
相关资源
最近更新 更多