Pandas处理大CSV文件时Pressure列非数值脏数据清洗问题
原代码问题说明
- 仅选取
Pressure单列执行操作,返回结果为Series结构,自然丢失Date/Time列与表头 - 基于
isinstance的数值判断逻辑不适用于CSV读取场景:只要列中存在非数值内容,pandas默认将整列设为object类型,纯数字条目也会以字符串格式存储,无法通过类型判断筛选脏数据 - 筛选逻辑取反:使用
~标记后最终返回的是非数值的脏数据行,而非清洗后的有效数据
清洗方案
直接使用pandas内置pd.to_numeric()函数实现需求,全程不会修改Date/Time列的内容。
基础方案(直接过滤非数值脏数据)
import pandas as pd # 读取CSV后执行转换,无法转为数值的脏数据会被标记为NaN df['Pressure'] = pd.to_numeric(df['Pressure'], errors='coerce') # 丢弃Pressure列为空的脏数据行,保留完整Date/Time列与表头 df_cleaned = df.dropna(subset=['Pressure']).reset_index(drop=True)
扩展方案(提取字符串中嵌入的数值)
如果脏数据为数值混杂字符的格式(如示例中的150+AA42BB43),可先通过正则提取数值部分再做转换:
# 提取条目中的整数/浮点数部分,无有效数值则返回空 df['Pressure'] = df['Pressure'].str.extract(r'(\d+\.?\d*)', expand=False) # 后续执行转数值、过滤空值操作即可 df['Pressure'] = pd.to_numeric(df['Pressure'], errors='coerce') df_cleaned = df.dropna(subset=['Pressure']).reset_index(drop=True)
保留脏数据行的处理方案
如果不需要删除脏数据行,可将空值替换为默认值:
# 例如用Pressure列的均值填充空值 df['Pressure'] = df['Pressure'].fillna(df['Pressure'].mean()) # 或用前一个有效值填充 df['Pressure'] = df['Pressure'].fillna(method='ffill')
内容的提问来源于stack exchange,提问作者SeanK22
相关产品推荐
相关产品推荐

