代码之家  ›  专栏  ›  技术社区  ›  user3486773

如何删除熊猫数据帧中所有负值的行?

  •  0
  • user3486773  · 技术社区  · 5 年前

    我有一个混合了列数据类型、float64和object的数据帧。

    我需要动态删除所有具有负值的行。以下是迄今为止我所拥有的:

     df = df[(df > 0).all(axis=1)]
    

    但由于一些列不是数字,所以它基本上会擦除整个df。

    我如何建立这个模型来只考虑数值列?有太多的列需要手动为每个列执行类似的操作,但如果必须按1:1执行,则可以执行此操作:

    df = df.drop(df[df['col1'] < 0].index, inplace=True)
    

    每当我尝试将它放入循环语句中时,在比较字符串和整数时会遇到错误。

    我只想扫描每行的每一列,如果我检测到一个数字,如果它是负数,就删除整行。我觉得这太难了。

    1 回复  |  直到 5 年前
        1
  •  2
  •   rafaelc    5 年前

    使用 select_dtypes 只获取数字列,并保留代码。

    df[df.select_dtypes(include=[np.number]).ge(0).all(1)]
    

    例子:

    df = pd.DataFrame({'col1': [1,2,3,4],
                       'col2': [-1, -2, 3, 4],
                       'col3': ['a','b','c','d'],
                       'col4': [1,2,3,4]})
    
    
       col1  col2 col3  col4
    0     1    -1    a     1
    1     2    -2    b     2
    2     3     3    c     3
    3     4     4    d     4
    

    给予

        col1    col2    col3    col4
    2   3       3       c       3
    3   4       4       d       4