Pandas:大数据集中字符串列含float值如何清理以便转为数值类型
问题根因
你的代码报错和逻辑不生效主要有4个问题:
- 循环中
int(i)仅转换了临时变量,没有赋值回DataFrame,转换结果不会生效 - Pandas DataFrame不存在
remove方法,无法通过该方式删除行 - 直接遍历列元素只能拿到值,无法定位对应行,删除操作无靶向性
- 若字符串本身带小数点(如"123.45"),直接调用
int()转换会触发Invalid literal for int() with base 10报错
解决方案
你的需求是剔除Pressure列的float值,保留字符串转成数值类型,直接用Pandas向量化操作即可,效率远高于循环,适合大文件:
import pandas as pd df = pd.read_csv('stripperdata.csv') # 筛选仅保留Pressure列为字符串的行,删除float类型行 df = df[df['Pressure'].apply(lambda x: isinstance(x, str))].copy() # 把字符串转为数值类型,自动兼容整数/小数字符串,不会出现int转换报错 df['Pressure'] = pd.to_numeric(df['Pressure'])
如果担心部分字符串格式异常转失败,可以加容错处理,转换失败的行自动删除:
import pandas as pd df = pd.read_csv('stripperdata.csv') df = df[df['Pressure'].apply(lambda x: isinstance(x, str))].copy() # errors='coerce'代表转换失败的数值自动设为NaN df['Pressure'] = pd.to_numeric(df['Pressure'], errors='coerce') # 删除转换失败的空值行,重置索引 df = df.dropna(subset=['Pressure']).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者SeanK22
相关产品推荐
相关产品推荐

