【问题标题】:Pandas drop rows where column contains *Pandas 删除列包含 * 的行
【发布时间】:2023-03-19 20:55:01
【问题描述】:

我正在尝试从此 df 中删除所有行,其中列“DB Serial”包含字符 *:

    DB Serial
0     13058
1     13069
2    *13070
3     13070
4     13044
5     13042

我正在使用:

df = df[~df['DB Serial'].str.contains('*')]

但我收到此错误:

    raise error, v # invalid expression
error: nothing to repeat

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    通过\ 转义*,因为* 被解释为regex

    '*' 使生成的 RE 匹配前面 RE 的 0 次或多次重复

    df = df[~df['DB Serial'].str.contains('\*')]
    print (df)
      DB Serial
    0     13058
    1     13069
    3     13070
    4     13044
    5     13042
    

    如果还得到:

    TypeError: 一元操作数类型错误 ~: 'float'

    然后将列转换为string,因为混合值 - 数字与字符串:

    df = df[~df['DB Serial'].astype(str).str.contains('\*')]
    print (df)
      DB Serial
    0     13058
    1     13069
    3     13070
    4     13044
    5     13042
    

    如果可能,NaNs 值:

    df = df[~df['DB Serial'].str.contains('\*', na=False)]
    

    【讨论】:

      猜你喜欢
      • 2018-08-18
      • 2022-08-11
      • 2023-02-17
      • 2014-02-05
      • 2014-10-29
      • 2019-01-17
      • 2022-11-17
      • 2022-11-07
      • 1970-01-01
      相关资源
      最近更新 更多