我有三个不同的字符串
'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? 我只需要时间值,而不是日期。
答案 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