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

如何高效检测Pandas字符串列中的数据不一致性与异常值?

用Pandas检测字符串类型DataFrame的异常/不一致数据

Pandas完全可以高效解决这类问题,无需逐行遍历,利用其矢量化操作就能处理大数据量场景,针对你提到的两种典型场景,具体实现如下:

一、检测数值列中的非整数异常值

针对像'A'列这种本应是整数格式、却混入浮点数/inf的字符串列,可通过正则匹配快速筛选异常值:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'A': ['32', '66', '45.7', '12', '19', 'inf', '90', '0.0', '22', '89', '21', '99']
})

# 匹配纯整数格式的字符串(支持正负整数)
is_valid_int = df['A'].str.match(r'^[+-]?\d+$')
# 筛选出异常值
invalid_values_A = df.loc[~is_valid_int, 'A']
print(invalid_values_A)

输出结果就是不符合整数格式的['45.7', 'inf', '0.0'],全程是矢量化操作,处理百万级数据也能保持高效。

二、检测日期列中的格式不一致数据

针对像'B'列这种日期格式不统一的情况,有两种高效处理方式:

方式1:已知主流格式时直接转换验证

如果明确多数数据的日期格式(比如YYYY-MM-DD),可以用pd.to_datetime强制按该格式转换,转换失败的即为异常数据:

df = pd.DataFrame({
    'B': ['1998-12-25', '1998-11-25', '25-10-1998', '25/09/1998', '08/25/1998', '1998-07-25', '1998-06-25']
})

# 按主流格式转换,转换失败的设为NaN
valid_dates = pd.to_datetime(df['B'], format='%Y-%m-%d', errors='coerce')
# 筛选出转换失败的异常日期
invalid_dates_B = df.loc[valid_dates.isna(), 'B']
print(invalid_dates_B)

方式2:未知主流格式时自动识别模式

如果不确定主流格式,可以先提取日期字符串的模式(将数字替换为统一标识),统计各模式的出现频率,筛选出非主流模式的行:

# 提取日期格式模式(把所有数字替换成X)
date_patterns = df['B'].str.replace(r'\d', 'X', regex=True)
# 统计各模式的出现次数
pattern_counts = date_patterns.value_counts()
# 获取占比最高的主流模式
dominant_pattern = pattern_counts.idxmax()
# 筛选出非主模式的异常日期
invalid_dates_B = df.loc[date_patterns != dominant_pattern, 'B']
print(invalid_dates_B)

两种方式都是矢量化操作,避免了逐行计算的低效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:30:24