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

Python新手求助:如何删除CSV文件中包含字符串的行?

清理CSV训练数据:移除含错误字符串的行

问题场景

作为Python编程新手,我正在写脚本清理用于训练的CSV文件。已经用df.dropna()成功移除了空值,但文件里存在像0,0.0,0.0,0.0,zero,0.0,0.0这种带错误字符串的行,想删除包含这类字符串的整行。

我试了下面的循环代码,但没效果:

Totalrows = len(df.index)
TotalColumns = df.shape[1]
CurrentColumn = 0

while CurrentColumn < TotalColumns:
    CurrentRow = 1
    while CurrentRow < Totalrows:
        if df.loc[CurrentRow, CurrentColumn] == str:
            df.drop(CurrentRow, axis=0, inplace=True)
    CurrentRow + 1
CurrentColumn + 1

另外常见的日期转换方案(比如df['Date'] = pd.to_datetime(df['Date']))不适用我的场景,该怎么解决?


问题分析

你写的循环有两个关键问题:

  1. CurrentRow + 1和CurrentColumn + 1只是做了计算,没有赋值给变量,循环永远不会推进,会直接陷入死循环
  2. 判断条件df.loc[CurrentRow, CurrentColumn] == str完全错误——str是Python的类型对象,你应该判断单元格的值类型是不是字符串,或者能不能被转换成数值

解决方案

用pandas的内置方法比手动写循环高效得多,分两种场景处理:

场景1:所有列都应该是数值型

如果你的CSV所有列都应该是数值(比如训练数据的特征列),直接把整个表转成数值,无法转换的内容会变成NaN,再删掉含NaN的行即可:

# 把所有列转为数值,无法转换的设为NaN
df = df.apply(pd.to_numeric, errors='coerce')
# 删除包含NaN的行(即原来有错误字符串的行)
df = df.dropna()

场景2:只有特定列不能有字符串

如果只是部分列需要检查(比如某几列特征必须是数值),指定列单独处理即可:

# 替换成你需要检查的列名
target_columns = ['feature1', 'feature3', 'feature5']

# 遍历指定列,转为数值,无法转换的设为NaN
for col in target_columns:
    df[col] = pd.to_numeric(df[col], errors='coerce')

# 只删除指定列中含NaN的行
df = df.dropna(subset=target_columns)

方法说明

pd.to_numeric的errors='coerce'参数会自动把非数值的字符串(比如zero)转换成NaN,之后用dropna就能精准删掉那些包含错误字符串的行,完全不用手动遍历每一行每一列,既简洁又高效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:25:20