如何检查时间序列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
相关产品推荐
相关产品推荐

