你将如何抑制低于阈值的值并用 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 中的字符串替换的主要内容,如果未能解决你的问题,请参考以下文章
如果 JUnit 覆盖率低于某个阈值,如何使 Maven 构建失败