在Pandas DataFrame中识别非时间戳值并替换为NaN(Python)
识别DataFrame中无法转换为时间差的异常值
方法1:借助pd.to_timedelta的错误处理标记异常值
利用errors='coerce'参数,将所有无法转换为时间差的值转为NaT(时间差类型的空值),再筛选出原列非空但转换后为NaT的行,就能定位所有异常值:
# 生成转换后的时间差列,无法转换的设为NaT df['Finish_timedelta'] = pd.to_timedelta(df['Finish'], errors='coerce') # 筛选出原值非空但转换失败的行 invalid_rows = df[df['Finish_timedelta'].isna() & df['Finish'].notna()] # 查看所有唯一的异常值 print(invalid_rows['Finish'].unique())
这种方法能覆盖所有pd.to_timedelta不支持的格式,包括手动输入的"NA"、格式错误的字符串等。
方法2:用正则表达式匹配合法时间格式
如果明确合法格式是HH:MM:SS或H:MM:SS,可以用正则直接匹配,筛选出不匹配的异常值:
import re # 定义匹配HH:MM:SS或H:MM:SS的正则 valid_pattern = r'^\d{1,2}:\d{2}:\d{2}$' # 筛选出不匹配正则且原值非空的行 invalid_rows = df[~df['Finish'].str.match(valid_pattern, na=False)] # 查看异常值 print(invalid_rows['Finish'].unique())
na=False参数用于跳过原列中的NaN值,避免正则匹配报错。
内容的提问来源于stack exchange,提问作者Laurence Pellerin
相关产品推荐
相关产品推荐

