你将如何抑制低于阈值的值并用 Python 中的字符串替换

Posted

技术标签:

【中文标题】你将如何抑制低于阈值的值并用 Python 中的字符串替换【英文标题】:How would you suppress values below a threshold and replace with a string in Python 【发布时间】:2021-09-17 08:39:18 【问题描述】:

我正在尝试替换数据框中低于限制(通常为 10)的值并替换为字符串。我在一个函数中尝试这样做,以使其尽可能可重用。

这是我目前拥有的:

def limit(data, limit = 10):
    column = data.select_dtypes(include=['int64']).columns.tolist()
    rule = data[column] < limit
    data.loc[rule.any(axis = 1), cols] = 0
    column = data.columns.tolist()
    data[data[column] == 0] = f'Less than limit starts'
    return data

DataFrame = pd.DataFrame('Country': ['Australia', 'United Kingdom', 'USA', 'Japan'],
                          'Participants': [30,2,4,11],
                          'Passed': [20,15,2,7)

DataFrame = limit(DataFrame, limit = 10)

上面的代码有两个问题:

    我正在寻找一个只修改小于 10 的值的表,但是上面的代码修改了同一行中的所有项目,例如,在日本,参与者 (11) 也被修改了,当他们不应该被修改时. 当我应用 f 字符串以使用标签标记空单元格时,我不断收到错误消息。错误信息是: TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value

关于可能导致这些问题的任何线索?

【问题讨论】:

谢谢!这真的很好!我想知道,如果我想继续使用该表来计算 % 或其他东西,存在字符串会不会是一个问题? 【参考方案1】:

试试这个:

def limit(data, threshold=10):
    cols = data.select_dtypes(include=['number']).columns
    data[cols] = data[cols].mask(data[cols]<threshold, f"Less than threshold starts")
    return data

>>> limit(df, 10)
          Country         Participants               Passed
0       Australia                   30                   20
1  United Kingdom  Less than 10 starts                   15
2             USA  Less than 10 starts  Less than 10 starts
3           Japan                   11  Less than 10 starts

【讨论】:

以上是关于你将如何抑制低于阈值的值并用 Python 中的字符串替换的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 将低于计数阈值的值替换为值

如果 JUnit 覆盖率低于某个阈值,如何使 Maven 构建失败

为超过/低于阈值的值制作不同颜色的ggplot2热图

利用 opencv实现图像自适应二值化 --python

Python时间序列 - 计算低于/高于和指定最短持续时间阈值的周期

如何删除每组计数低于阈值的记录?