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

如何检查时间序列DataFrame日期列的拼写错误及合规性?

验证时间序列DataFrame日期列的方法

我有一个时间序列DataFrame,其中date列理论上应包含数年中连续的所有周一和周四,格式为Monday mm/dd/yyyy或Thursday mm/dd/yyyy。示例数据如下:

Monday 07/31/2023
Thursday 07/27/2023
Monday 07/24/2023
Thursday 07/20/2023
Monday 07/17/2023
Friday 07/13/2023
Thursday 07/10/2023
Monday 07/06/2023
Thursday 07/03/2023
Monday 06/29/2023

以下是针对三个检查项的具体实现:

步骤1:数据预处理

先拆分日期列的星期标识与日期字符串,再转换为可计算的datetime对象:

import pandas as pd

# 假设你的DataFrame名为df
df['day_str'] = df['date'].str.split(' ').str[0]
df['date_obj'] = pd.to_datetime(df['date'].str.split(' ').str[1], format='%m/%d/%Y')

步骤2:执行三项检查

检查1:相邻行星期几交替无重复

验证相邻行的星期是否交替出现(仅周一、周四且无连续重复):

valid_alternation = (df['day_str'].ne(df['day_str'].shift())) & \
                    df['day_str'].isin(['Monday', 'Thursday'])
invalid_alternation = df[~valid_alternation]
print("星期交替异常的行:")
print(invalid_alternation)

检查2:相邻行日期间隔为3天或4天

计算相邻日期的差值,验证是否符合周一到周四(3天)、周四到下周一(4天)的间隔:

df['date_diff'] = df['date_obj'].shift(-1) - df['date_obj']
df['date_diff_days'] = df['date_diff'].dt.days

# 最后一行无后续数据,默认标记为有效
valid_interval = df['date_diff_days'].isin([3, 4]) | df['date_diff_days'].isna()
invalid_interval = df[~valid_interval]
print("\n日期间隔异常的行:")
print(invalid_interval)

检查3:星期标识与实际日期的星期一致

验证标注的星期与日期对应的实际星期是否匹配:

# datetime.weekday():0=周一,3=周四
day_mapping = {0: 'Monday', 3: 'Thursday'}
df['actual_day'] = df['date_obj'].dt.weekday.map(day_mapping)

valid_day_match = df['day_str'] == df['actual_day']
invalid_day_match = df[~valid_day_match]
print("\n星期标识与实际日期不匹配的行:")
print(invalid_day_match)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:15:00