如果列(第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')但它似乎使它成为一个"and“语句。
我经常收到这样的错误: ValueError:级数的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我试着用|代替,它也不能工作。
发布于 2019-09-06 04:32:32
# 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更改掩码为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发布于 2019-09-06 04:26:58
试试这个:
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)发布于 2019-09-06 04:30:57
请看一下Series.isin()函数。它做的正是你想要的
df.loc[109:140,1].isin(['Method', 'Replicates', 'StandardDeviation'])https://stackoverflow.com/questions/57812387
复制相似问题