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

如何从Pandas DataFrame中剔除C1或C4列含字符串的行?

问题描述

我有如下DataFrame:

C1C2C3C4
1fooasd23
foofooasd43
3fooasd1
4fooasdbar

希望过滤并剔除所有C1或C4列中包含字符串的行,最终得到:

C1C2C3C4
1fooasd23
3fooasd1

我尝试用isNaN实现,但不确定用法,现有代码如下:

df = pd.read_csv(
    path_file,
    sep=",",
    usecols=columns,
    skiprows=0,
    skipfooter=0,
    engine="python",
    encoding="utf-8",
    skipinitialspace=True,
    on_bad_lines='warn',
    names=columns)

df_new = df[df["C1"].notna()]
df_new_2 = df[df["C4"].notna()]
解决方案

你的问题不是处理空值(NaN),而是要筛选出C1和C4列均为有效数值的行。可以通过pd.to_numeric配合errors='coerce'将非数值内容转为NaN,再用notna()过滤:

# 标记C1列中可转为数值的行
valid_c1 = pd.to_numeric(df['C1'], errors='coerce').notna()
# 标记C4列中可转为数值的行
valid_c4 = pd.to_numeric(df['C4'], errors='coerce').notna()
# 保留同时满足两列都为有效数值的行
df_filtered = df[valid_c1 & valid_c4]

也可以合并为一行代码:

df_filtered = df[pd.to_numeric(df['C1'], errors='coerce').notna() & pd.to_numeric(df['C4'], errors='coerce').notna()]

关键逻辑说明

  • pd.to_numeric(..., errors='coerce'):尝试将列转为数值类型,无法转换的字符串会被强制转为NaN
  • .notna():筛选出非NaN的行,即原列中为有效数值的行
  • &:逻辑与运算符,只有同时满足C1和C4均为有效数值的行才会被保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:33:09