您将如何抑制低于阈值的值并替换为 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)
上面的代码有两个问题:
- 我要找一个table只修改小于10的值,但是上面的代码修改了同一行的所有项目,比如在日本,参与者(11)也被修改当他们不应该的时候。
- 当我应用 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
我正在尝试替换数据框中低于限制(通常为 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)
上面的代码有两个问题:
- 我要找一个table只修改小于10的值,但是上面的代码修改了同一行的所有项目,比如在日本,参与者(11)也被修改当他们不应该的时候。
- 当我应用 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