pandas.dataframe.info() 是定位数据异常的首要工具,可查看字段类型、缺失值数量和内存占用;若数值列显示为object,需用unique()检查是否混入空格或字符串;配合describe(include="all")、isna().sum()、duplicated().sum()和infer_dtype()可全面诊断脏数据。

用 pandas.DataFrame.info() 看清数据“底细”
DataFrame.info() 不只是查行列数,它直接暴露字段类型、缺失值数量和内存占用——这是定位异常的第一把尺子。很多“计算结果不对”其实源于某列本该是 int64 却被读成 object(比如混入了空格或“N/A”字符串),导致后续 .sum() 或 .mean() 静默跳过。
- 运行
df.info()后重点关注Non-Null Count列:若明显少于Total Count,说明有缺失;但更要盯住Dtype是否符合预期 - 如果某数值列显示为
object,别急着转换,先用df["col"].unique()[:10]看前10个值,常会发现" "、"-"、"NULL"这类伪装成数值的字符串 -
info()默认不显示全部列,列太多时加参数verbose=True,或直接用df.info(memory_usage="deep")查内存暴增是否由字符串列引起
用 df.describe(include="all") 横向比对各列分布
describe() 默认只统计数值列,加上 include="all" 才能同时看到分类列的 unique、top、freq,这对发现脏数据特别有用。比如某用户ID列本应唯一,但 unique 值远小于行数,说明重复或格式混乱。
- 数值列的
min/max出现明显离群值(如年龄=999、金额=-1),大概率是占位符没清洗 - 字符串列的
top值如果频繁出现"unknown"或"--",要确认业务上是否允许,否则后续groupby会把它们全归一类 - 注意
count和unique的差值:若差值大,说明大量重复值,可能意味着上游系统写入异常或去重逻辑失效
用 df.isna().sum() 和 df.duplicated().sum() 量化异常规模
光看“有没有”不够,得知道“有多少”。isna().sum() 返回每列缺失数,duplicated().sum() 返回完全重复行数——这两个数字决定你该清洗还是换数据源。
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
- 缺失数占比超过 5% 的列,别急着用
fillna(),先查缺失是否集中在某时间段(如某天所有传感器断连),这种系统性缺失填了也没意义 -
duplicated()默认检查所有列,但业务上可能只关心关键字段(如订单号+时间),这时改用df.duplicated(subset=["order_id", "timestamp"]) - 注意
df.duplicated(keep=False)能标出所有重复项(包括首行),方便批量排查,而默认的keep="first"只标记后续重复行
用 pd.api.types.infer_dtype() 检查单列数据类型可信度
infer_dtype() 比 dtype 更细粒度:它能告诉你一列是 string、mixed-integer 还是 floating,尤其适合发现“看似数字实则混杂”的列。
立即学习“Python免费学习笔记(深入)”;
- 对疑似问题列运行
pd.api.types.infer_dtype(df["col"]),若返回mixed或mixed-integer,基本可以确定存在非标准值 - 它不修改数据,只诊断,所以可放心在生产环境小样本上跑,比如
pd.api.types.infer_dtype(df["price"].head(1000)) - 返回
decimal通常表示有Decimal对象混入,这会导致numpy运算报TypeError: unsupported operand type(s)
真实数据里最麻烦的不是缺失或重复,而是那些“看起来正常却悄悄污染结果”的值——比如时间列里混进一个 "2023-02-30",to_datetime() 默认转成 NaT,但没人告诉你它在哪一行。这类问题必须结合多维度交叉验证,不能只信单一函数的输出。









