【问题标题】:Set the values greater than x to x, and the values less than -x to -x将大于 x 的值设置为 x,将小于 -x 的值设置为 -x
【发布时间】:2018-11-11 03:07:42
【问题描述】:

我已经尝试过,但无法弄清楚这一点。我必须将下面数据框中所有大于 3 的数据更改为 3,小于 -3 的数据更改为 -3。

np.random.seed(42)
randomdata = DataFrame(np.random.randn(400, 4))

我尝试过 for 循环、.loc、.where,但似乎没有任何效果。

【问题讨论】:

  • 我对这个社区很陌生,希望有人能帮助我理解为什么我的问题被如此反对?该网站告诉我,他们将禁止我提问。我真的很重视这个社区,并希望确保我能正确参与!

标签: python pandas random


【解决方案1】:

编辑:对于熊猫,pandas 有DataFrame.clip

numpy.clip.

import numpy as np

thing = np.arange(-5, 6)  # [-5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5]

clipped_thing = np.clip(thing, -3, 3)

print(clipped_thing)

输出

[-3 -3 -3 -2 -1  0  1  2  3  3  3]

【讨论】:

    【解决方案2】:
    # Creating a data frame with 4 variables and 400 observations
    np.random.seed(42)
    randomdata = pd.DataFrame(np.random.randn(400, 4))
    randomdata.head()
    
            0           1           2          3
    0    0.496714   -0.138264    0.647689    1.523030
    1   -0.234153   -0.234137    1.579213    0.767435
    2   -0.469474    0.542560   -0.463418   -0.465730
    3    0.241962   -1.913280   -1.724918   -0.562288
    4   -1.012831    0.314247   -0.908024   -1.412304
    
    # Cap and floor for one variable
    randomdata[0].clip(lower=-0.5, upper=0.5)
    
    # Cap and floor entire dataframe
    clean_df = randomdata.clip(lower=-0.5, upper=0.5)
    clean_df.head()
    
           0            1           2          3
    0    0.496714   -0.138264    0.500000    0.50000
    1   -0.234153   -0.234137    0.500000    0.50000
    2   -0.469474    0.500000   -0.463418   -0.46573
    3    0.241962   -0.500000   -0.500000   -0.50000
    4   -0.500000    0.314247   -0.500000   -0.50000
    

    【讨论】:

    • 非常感谢。我还没有学过剪辑功能,所以这是一个真正的节省生命和时间的方法!
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多