从时间戳字符串提取日期并统计占比的技术求助
问题描述
我有一个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
相关产品推荐
相关产品推荐

