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

use*_*773 2 python dataframe pandas

我有一个混合了列数据类型、float64 和对象的数据框。

我需要动态删除所有具有负值的行。这是我到目前为止所拥有的:

 df = df[(df > 0).all(axis=1)]
Run Code Online (Sandbox Code Playgroud)

但是因为一些列不是数字,它基本上擦除了整个 df。

我如何构建它以仅考虑数字列?有太多的列需要手动为每一列做这样的事情,但如果我必须 1 到 1,这确实有效:

df = df.drop(df[df['col1'] < 0].index, inplace=True)
Run Code Online (Sandbox Code Playgroud)

每当我尝试将其放入循环语句时,我都会遇到有关将字符串与整数进行比较的错误。

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

raf*_*elc 6

用于select_dtypes仅获取数字列,并保留您的代码。

df[df.select_dtypes(include=[np.number]).ge(0).all(1)]
Run Code Online (Sandbox Code Playgroud)

例子:

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
Run Code Online (Sandbox Code Playgroud)

    col1    col2    col3    col4
2   3       3       c       3
3   4       4       d       4
Run Code Online (Sandbox Code Playgroud)