如何将不同长度的字符串转换为精度不同的时间戳以进行熊猫插值?

时间:2019-06-22 18:02:42

标签: python pandas

我有三个不同的字符串

'0300' , '0600' and '03125455'.

我想将它们转换为熊猫时间戳

'03:00:0000' , '06:00:0000' and  '03:12:5455'

这样我就可以在第三个变量内插前两个变量的相应值。我没有任何日期数据。我正在使用的是以下

time1 = pd.to_datetime('2018050103000000')  # Dummy date 2018-05-01
time2 = pd.to_datetime('2018050106000000')
timeX = pd.to_datetime('2018050103125455')

val1  = 100
val2  = 200

df    = pd.DataFrame( [(time1, val1) , (time2, val2)] , columns=['Times','Values'] ) 

df    = df.set_index('Times')
df    = pd.Series(df['Values'], index=df.index)
inter = df.resample('S').interpolate(method='linear')
valX  =interp.loc[timeX]

但是我遇到以下错误:

OverflowError: Python int too large to convert to C long

在使用或不使用虚拟日期的情况下,如何正确将这些字符串转换为datetime? 我只需要时间值,而不是日期。

2 个答案:

答案 0 :(得分:1)

分两步完成

import pandas as pd
import datetime as dt

df = pd.DataFrame([('0300',100),('0600',200)], columns=['Times', 'Values'])

df
Out[25]:
  Times  Values
0  0300     100
1  0600     200

转换为日期时间列

df['Times2'] = df.Times.apply(lambda x:pd.to_datetime(x.ljust(8,'0'),format='%H%M%S%f'))


 Out[49]:
  Times  Values              Times2
0  0300     100 1900-01-01 03:00:00
1  0600     200 1900-01-01 06:00:00

然后将日期时间转换为时间列

df['Times2'] = df.Times2.apply(lambda x: dt.datetime.time(x))

df
Out[51]:
  Times  Values    Times2
0  0300     100  03:00:00
1  0600     200  06:00:00

答案 1 :(得分:0)

看起来像您需要的。

例如:

time_data = ['0300' , '0600', '03125455']
for t in time_data:
    print(pd.to_datetime(t.ljust(8, "0"), format="%H%M%S%f").strftime("%H:%M:%S%f"))

输出:

03:00:00000000
06:00:00000000
03:12:54550000