如何根据多个条件更改列的一部分中的值?

2024-04-20 03:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如果一列的某个部分(第109行到第140行)的值不等于3个不同的字符串,我想更改它们的值。你知道吗

我试着不迭代,现在我似乎只能在一个条件下迭代。你知道吗

df.loc[109:140,1] != 'Method' or df.loc[109:140,1] != 'Replicates' or df.loc[109:140,1] != 'StandardDeviation'

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我试过这个:

df.loc[109:140,1] != ('Method', 'Replicates', 'StandardDeviation')

但这似乎是一个“和”的声明。你知道吗

我经常遇到这样的错误: ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。你知道吗

我试过用|来代替,但也不起作用。你知道吗


Tags: orthe字符串dfanyallitem条件
3条回答

请看一下Series.isin()函数。它正是你想要的

df.loc[109:140,1].isin(['Method', 'Replicates', 'StandardDeviation'])
# mcve:

# np.random.seed(42)
# df = pd.DataFrame({1: np.random.choice(('asdf', 'Method', 'Replicates', 'StandardDeviation'), 10)})

#                    1
# 0         Replicates
# 1  StandardDeviation
# 2               asdf
# 3         Replicates
# 4         Replicates
# 5  StandardDeviation
# 6               asdf
# 7               asdf
# 8         Replicates
# 9             Method

使用pd.Series.isin()创建掩码

mask = df[1].isin(('Method', 'Replicates', 'StandardDeviation'))

并使用where更改序列的子集,其中mask是False。你知道吗

df.loc[5:9, 1] = df.loc[5:9, 1].where(mask, 'new better value')

结果:

#                    1
# 0         Replicates
# 1  StandardDeviation
# 2               asdf
# 3         Replicates
# 4         Replicates
# 5  StandardDeviation
# 6   new better value
# 7   new better value
# 8         Replicates
# 9             Method

试试这个:

df.loc[109:140]["NAME_OF_COLUMN_1"] = df.apply(lambda row: value1
                                            if row['NAME_OF_COLUMN_1'] not in ['Method', 'Replicates', 'StandardDeviation']
                                            else row['NAME_OF_COLUMN_1'], axis=1)

相关问题 更多 >