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

时间:2019-08-17 03:18:12

标签: python pandas dataframe

我有一个包含列dtypes,float64和object混合的数据框。

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

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

但是由于某些列不是数字列,因此基本上擦除了整个df。

如何构建仅考虑数字列的方法?有太多的列需要手动为每个列执行类似的操作,但是如果我必须按1:1进行操作,这确实可行。

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

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

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

1 个答案:

答案 0 :(得分:3)

使用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