Pandas DataFrame 使用 Timedelta 将 H:M:S:f 格式的时间设置为 00:00:00:000
Pandas DataFrame use Timedelta to set time in H:M:S:f format to 00:00:00:000
我有一个 pandas DataFrame,其中包含以下列 (first column = index)
:
0 14:43:45:921
1 14:43:45:923
2 14:43:45:925
我想修改此栏,或添加另一栏,时间从0
:
开始
0 00:00:00.000
1 00:00:00.002
2 00:00:00.004
到目前为止,我已经尝试了以下代码:
df['time'].apply(pd.Timedelta)
这给我以下错误:
expected hh:mm:ss format
对我来说,问题是
a) 将时间格式HH:MM:SS:fff
转换为HH:MM:SS.fff
和
b) 让 timedelta
函数工作。
有人有什么建议吗?谢谢!
使用to_datetime
:
s = pd.to_datetime(df['time'], format='%H:%M:%S:%f')
或Series.str.replace
with to_timedelta
:
s = pd.to_timedelta(df['time'].str.replace('(:)(\d+)$', r'.'))
然后减去第一个值:
df['new'] = s.sub(s.iat[0])
print (df)
time new
0 14:43:45:921 0 days 00:00:00
1 14:43:45:923 0 days 00:00:00.002000
2 14:43:45:925 0 days 00:00:00.004000
如需次数:
df['new'] = s.sub(s.iat[0])
df['new1'] = df['new'].apply(lambda x: (pd.datetime.min + x).time())
print (df)
time new new1
0 14:43:45:921 0 days 00:00:00 00:00:00
1 14:43:45:923 0 days 00:00:00.002000 00:00:00.002000
2 14:43:45:925 0 days 00:00:00.004000 00:00:00.004000
print (type(df.at[0, 'new']))
<class 'pandas._libs.tslibs.timedeltas.Timedelta'>
print (type(df.at[0, 'new1']))
<class 'datetime.time'>
我有一个 pandas DataFrame,其中包含以下列 (first column = index)
:
0 14:43:45:921
1 14:43:45:923
2 14:43:45:925
我想修改此栏,或添加另一栏,时间从0
:
0 00:00:00.000
1 00:00:00.002
2 00:00:00.004
到目前为止,我已经尝试了以下代码:
df['time'].apply(pd.Timedelta)
这给我以下错误:
expected hh:mm:ss format
对我来说,问题是
a) 将时间格式HH:MM:SS:fff
转换为HH:MM:SS.fff
和
b) 让 timedelta
函数工作。
有人有什么建议吗?谢谢!
使用to_datetime
:
s = pd.to_datetime(df['time'], format='%H:%M:%S:%f')
或Series.str.replace
with to_timedelta
:
s = pd.to_timedelta(df['time'].str.replace('(:)(\d+)$', r'.'))
然后减去第一个值:
df['new'] = s.sub(s.iat[0])
print (df)
time new
0 14:43:45:921 0 days 00:00:00
1 14:43:45:923 0 days 00:00:00.002000
2 14:43:45:925 0 days 00:00:00.004000
如需次数:
df['new'] = s.sub(s.iat[0])
df['new1'] = df['new'].apply(lambda x: (pd.datetime.min + x).time())
print (df)
time new new1
0 14:43:45:921 0 days 00:00:00 00:00:00
1 14:43:45:923 0 days 00:00:00.002000 00:00:00.002000
2 14:43:45:925 0 days 00:00:00.004000 00:00:00.004000
print (type(df.at[0, 'new']))
<class 'pandas._libs.tslibs.timedeltas.Timedelta'>
print (type(df.at[0, 'new1']))
<class 'datetime.time'>