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

How would you suppress values below a threshold and replace with a string in Python

我正在尝试替换数据框中低于限制(通常为 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)

上面的代码有两个问题:

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

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

试试这个:

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