【问题标题】:How do I replace values in an entire dataset?如何替换整个数据集中的值?
【发布时间】:2020-07-11 10:34:34
【问题描述】:

所以我需要用 0 替换名为“x”的数据框中所有大于 140 且小于 35 的值。我有 600 列全部命名为 1-600。我尝试了下面的方法,但我不知道如何将其应用于整个数据集。

x=x.mask(x['1']>140,0)

当我尝试这样做时

x=x.mask(x>140,0)

这是错误信息:

TypeError:“str”和“int”实例之间不支持“>”

谁能帮帮我,谢谢。

【问题讨论】:

    标签: python pandas dataframe replace


    【解决方案1】:

    首先使用df = df.astype(int)将数据框所有列转换为int类型

    你可以试试 numpy astype:

    a = df.values
    #convert datatype to int
    a = a.astype(int)
    pd.DataFrame(np.where(( a > 140) | (a < 35) , 0, a))
    

    另外,您可以使用mask,如下所示:

    df.mask((df > 140) | (df < 35) , 0)
    

    【讨论】:

    • 谢谢,但还是出现同样的错误,TypeError: '>' not supported between 'str' and 'int'
    • @MaryA,你的数据框只包含整数,那么你应该在执行操作之前将它们转换为int类型如下df = df.astype(int)。该错误清楚地表明该列没有int 类型。或者你应该只选择整数列。
    • @MaryA,没问题,谢谢。标记为正确答案,那么它至少可以帮助其他人看到解决方案。
    【解决方案2】:

    如果你写x,表示数据框,为了解决它的内容,你必须写x[:]

    x = x.mask(x[:]>140, 0)
    

    【讨论】:

    • 谢谢,但还是出现同样的错误,TypeError: '>' not supported between 'str' and 'int'
    • 我将数据框更改为数字,它可以工作,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-06-27
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多