You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效将Pandas DataFrame时间列转换为datetime.time对象

高效提取Datetime列的时分秒部分(9万+行数据集)

针对你的9万+行传感器数据集,以下是几种高效的处理方案,按性能从高到低排序:

方法1:提取datetime.time对象(最优性能,矢量化操作)

直接利用Pandas的dt.time属性,这是原生矢量化操作,处理大数据量速度最快,且保留时间的结构化信息:

df = pd.read_csv('RAB_EXP1_7d_DFT.CSV')
df['Time'] = pd.to_datetime(df['Time'])
# 提取时分秒部分,得到datetime.time类型对象
df['Time_of_day'] = df['Time'].dt.time

处理后输出示例:

0       12:20:21
1       12:20:26
2       12:20:31
...
89971   17:17:55
Name: Time_of_day, dtype: object

这种格式的时间可以直接被Matplotlib识别,适合后续绘图分析。

方法2:格式化为字符串(按需使用)

如果需要纯文本格式的时分秒,可以用dt.strftime,性能略低于方法1,但满足文本展示需求:

df['Time_str'] = df['Time'].dt.strftime('%H:%M:%S')

方法3:转换为当日秒数(适合数值化分析)

若后续绘图或分析需要数值化的时间(比如计算一天内的相对时长),可以将时间转为当日累计秒数,方便做数值过滤和计算:

# 方式1:手动计算秒数
df['Seconds_of_day'] = df['Time'].dt.hour * 3600 + df['Time'].dt.minute * 60 + df['Time'].dt.second
# 方式2:利用timedelta计算总秒数(更简洁)
df['Seconds_of_day'] = (df['Time'] - df['Time'].dt.normalize()).dt.total_seconds()

这种数值化的时间适合精准筛选时段,也能避免跨天日期的干扰。

后续绘图实践建议

针对你寻找读数大于0时段的需求,推荐结合方法1或方法3使用:

  • 用dt.time格式:Matplotlib可直接渲染时间轴,直观展示时段分布;
  • 用秒数格式:便于做数值范围筛选(比如筛选早8点到晚6点的数据),也能更灵活地调整图表刻度。

绘图示例代码

import matplotlib.pyplot as plt

# 筛选读数大于0的数据
filtered_df = df[df['Reading'] > 0]

plt.figure(figsize=(12, 6))
plt.plot(filtered_df['Time_of_day'], filtered_df['Reading'], marker='.', linestyle='', alpha=0.6)
plt.xlabel('Time of Day')
plt.ylabel('Sensor Reading')
plt.title('Sensor Readings > 0 by Time of Day')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者kfir648

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:55:04