【问题标题】:How to exclude few columns and replace negative values in Big data?如何排除少数列并替换大数据中的负值?
【发布时间】:2019-12-30 12:04:19
【问题描述】:

我有一个如下所示的数据框

import pandas as pd

df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1]})

在我的真实数据中,我有 100 多列。我想做的是排除两列,我想将所有其他列中的负值替换为零

我试过了,但它适用于所有列。

df[df < 0] = 0

唯一的方法是将所有列名放在一个列表中并通过如下所示的循环运行

col_list = ['a1','a2','a3','a4',..........'a100']   # in this `a21`,a22` columns are ignored from the list

for col in col_list:
    df[col] = [df[col]<0] = 0

正如您所见,它冗长且效率低下。

你能帮我用任何有效的方法来做到这一点吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    df[col_list]有问题return booleanDataFrame,所以不能被指定列名的df[df &lt; 0] = 0过滤,必须使用DataFrame.mask

    col_list = df.columns.difference(['a21','a22'])
    m = df[col_list] < 0
    
    df[col_list] = df[col_list].mask(m, 0)
    

    编辑:

    对于没有a21a22 的数字列,使用DataFrame.select_dtypesIndex.difference

    df = pd.DataFrame({
            'a21':list('abcdef'),
             'B':[4,5,4,5,5,4],
             'C':[-7,8,9,4,2,3],
             'D':[1,3,5,-7,1,'a'], <- object column because last `a`
             'E':[5,3,-6,9,2,-4],
             'a22':list('aaabbb')
    })
    
    
    col_list = df.select_dtypes(np.number).columns.difference(['a21','a22'])
    m = df[col_list] < 0
    df[col_list] = df[col_list].mask(m, 0)
    print (df)
      a21  B  C   D  E a22
    0   a  4  0   1  5   a
    1   b  5  8   3  3   a
    2   c  4  9   5  0   a
    3   d  5  4  -7  9   b
    4   e  5  2   1  2   b
    5   f  4  3   a  0   b
    

    【讨论】:

    • 所以,我必须准备一份清单。是否可以选择排除这两个列并且不使用col_list
    • 我收到这样的错误TypeError: '&lt;' not supported between instances of 'str' and 'int'
    • @SSMK - 第一个还是第二个解决方案?
    • 是数据类型的原因吗?我的数据框也有 str ,int,float
    • 我仍然遇到同样的错误。现在将尝试更改数据类型
    【解决方案2】:

    在 0 处进行简单的裁剪怎么样?

    df[col_list] = df[col_list].clip(0)
    

    【讨论】:

    • 感谢您的回复。赞成。但是没有col_list,有什么办法可以做到这一点吗?
    • @SSMK 你必须以某种方式指定你想要的列。 col_list = [i for i in df.columns if i not in ['a21', 'a22']] 可以接受吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多