代码之家  ›  专栏  ›  技术社区  ›  Umar.H

删除所有符合regex条件的行

  •  4
  • Umar.H  · 技术社区  · 6 年前

    试着教我自己。。玩不同的数据类型

    我有一个df如下

    df = pd.DataFrame({'ID':[0,2,"bike","cake"], 'Course':['Test','Math','Store','History'] })
    print(df)
        ID  Course
    0   0   Test
    1   2   Math
    2   bike    Store
    3   cake    History
    

    ID的数据类型当然是一个对象。我想做的是删除DF中的任何行,如果ID中有一个字符串。

    我以为这很简单。。

    df.ID.filter(regex='[\w]*')
    

    3 回复  |  直到 6 年前
        1
  •  5
  •   BENY    6 年前

    你可以使用 to_numeric

    df[pd.to_numeric(df.ID,errors='coerce').notnull()]
    Out[450]: 
      Course ID
    0   Test  0
    1   Math  2
    
        2
  •  5
  •   pault Tanjin    6 年前

    另一个选项是将列转换为字符串并使用 str.match :

    print(df[df['ID'].astype(str).str.match("\d+")])
    #  Course ID
    #0   Test  0
    #1   Math  2
    

    您的代码不起作用,因为 pandas.DataFrame.filter

        3
  •  5
  •   user3483203    6 年前

    Wen's answer 是解决这个问题的正确(也是最快的)方法,但是要解释正则表达式为什么不起作用,您必须了解 \w

    [a-zA-Z0-9_] 包括 数字,所以一切都是匹配的。有效的正则表达式方法是:

    df.loc[df.ID.astype(str).str.match(r'\d+')]
    

      ID Course
    0  0   Test
    1  2   Math
    

    第二个问题是你使用 filter ID 行,它正在筛选您的索引。一个有效的解决方案使用 具体如下:

    df.set_index('ID').filter(regex=r'^\d+$', axis=0)
    

       Course
    ID
    0    Test
    2    Math