【发布时间】:2021-03-16 05:18:56
【问题描述】:
【问题讨论】:
-
不要粘贴截图。共享要复制的数据。
标签: python pandas string datetime
【问题讨论】:
标签: python pandas string datetime
首先将字符串替换为格式,以便在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
【讨论】: