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

从时间戳字符串提取日期并统计占比的技术求助

问题描述

我有一个XLS文件,其中TIME_STAMP列包含带不同日期及对应时间的时间戳条目,示例数据如下:

TIME_STAMP
21/04/2023 09:46:55.000
21/04/2023 09:46:55.858
21/04/2023 09:46:56.000
21/04/2023 09:46:57.000
21/04/2023 09:46:58.000
21/04/2023 09:46:59.000
21/04/2023 09:47:00.000
21/04/2023 09:47:01.000
22/04/2023 09:47:02.000
22/04/2023 09:47:03.000
22/04/2023 09:47:04.000
22/04/2023 09:47:05.000
22/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000
23/04/2023 09:47:06.000

我需要统计4月21日、22日、23日这三个日期的条目总数,以及各日期条目数占总条目数的百分比。

尝试了以下代码,但未达到预期效果:

df=pd.read_excel('TIME_Stamp.xlsx')

print('The total no of rows with DATE values is:')
print(df['TIME_STAMP'].count())
print('The stats for TIME_STAMP column is:')
print(df['TIME_STAMP'].value_counts())
解决方案

你的代码问题在于直接对带完整时间戳的TIME_STAMP列做value_counts(),会把每个不同的时间戳当成独立条目统计,而不是按日期分组。按以下步骤修改即可实现需求:

完整代码

import pandas as pd

# 读取Excel文件
df = pd.read_excel('TIME_Stamp.xlsx')

# 将TIME_STAMP列解析为datetime类型,指定格式避免解析错误
df['TIME_STAMP'] = pd.to_datetime(df['TIME_STAMP'], format='%d/%m/%Y %H:%M:%S.%f')

# 提取日期部分生成新列
df['DATE'] = df['TIME_STAMP'].dt.date

# 按日期统计条目数并排序
date_counts = df['DATE'].value_counts().sort_index()

# 计算总条目数
total = df['TIME_STAMP'].count()

# 输出结果
print(f"总条目数:{total}")
print("\n各日期统计:")
for date, cnt in date_counts.items():
    ratio = (cnt / total) * 100
    print(f"{date}:{cnt}条,占比{ratio:.2f}%")

关键说明

  • pd.to_datetime指定format='%d/%m/%Y %H:%M:%S.%f':明确告诉pandas时间戳的格式是日/月/年 时:分:秒.毫秒,避免自动解析出错。
  • dt.date:从datetime对象中剥离时间部分,只保留纯日期,这样就能按日期分组统计。
  • value_counts().sort_index():统计每个日期的条目数后按日期排序,保证输出顺序是21日→22日→23日。
  • 百分比保留两位小数,结果更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:54:59