熊猫数据框日期时间到时间然后到秒
Posted
技术标签:
【中文标题】熊猫数据框日期时间到时间然后到秒【英文标题】:Pandas dataframe datetime to time then to seconds 【发布时间】:2018-06-16 04:33:08 【问题描述】:我有一个数据框。一列包含时间戳。我想删除日期并将时间转换为秒。
首先我将它们转换为日期时间:
In:
df_time = pd.to_datetime(df["Timestamp"])
Out:
0 2017-11-07 13:09:00
1 2017-11-07 13:11:00
2 2017-11-07 13:13:00
3 2017-11-07 13:15:00
dtype: datetime64[ns]
然后我删除了日期:
In:
df_time = pd.Series([val.time() for val in df_time])
Out:
0 13:09:00
1 13:11:00
2 13:13:00
3 13:15:00
4 13:17:00
dtype: object
但是它们变成了对象,我没有设法将它们转换为类似日期时间的对象以将它们转换为秒。我知道有一些类似的线程我通过它们。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:由于您要将其转换为日期时间序列,因此只需使用基本数学来获取秒数,即
df_time = pd.to_datetime(df["Timestamp"])
(df_time.dt.hour*60+df_time.dt.minute)*60 + df_time.dt.second
0 47340
1 47460
2 47580
3 47700
Name: Timestamp, dtype: int64
【讨论】:
在我实现之后,它给出了两个错误:1:TypeError:无法将df["Timestamp"] = pd.to_datetime(df["Timestamp"])
;)【参考方案2】:
我认为你需要timedelta
s 由to_timedelta
和times
由split
创建并选择第二个list
s 由str[1]
,然后total_seconds
并最后转换为int
:
df_time = pd.to_timedelta(df["Timestamp"].str.split().str[1]).dt.total_seconds().astype(int)
print (df_time)
0 47340
1 47460
2 47580
3 47700
Name: Timestamp, dtype: int32
详情:
print (df["Timestamp"].str.split().str[1])
0 13:09:00
1 13:11:00
2 13:13:00
3 13:15:00
Name: Timestamp, dtype: object
print (pd.to_timedelta(df["Timestamp"].str.split().str[1]))
0 13:09:00
1 13:11:00
2 13:13:00
3 13:15:00
Name: Timestamp, dtype: timedelta64[ns]
或者如果需要秒表datetime
s 使用dt.second
:
df_time = pd.to_datetime(df["Timestamp"]).dt.second
print (df_time)
0 0
1 0
2 0
3 0
Name: Timestamp, dtype: int64
【讨论】:
也许 str 对于日期时间列来说有点太多了 嗯,问题是不是日期时间列,所以第一步是转换为日期时间。【参考方案3】:如果您要减去持续时间,请使用以下以秒为单位进行转换 (tsession['EndTime'] -tsession['StartTime'])/np.timedelta64(1, 's')
【讨论】:
以上是关于熊猫数据框日期时间到时间然后到秒的主要内容,如果未能解决你的问题,请参考以下文章