python - 如何根据多个条件更改列的一部分中的值?
问题描述
如果它们不等于 3 个不同的字符串,我想更改列的一部分(第 109 到 140 行)的值。
我试图不迭代,现在我似乎只能在一种情况下这样做。
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()。
我试过用 a|
代替,它也不起作用。
解决方案
# 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
推荐阅读
- android - 横幅广告未显示真实单位 ID
- ruby-on-rails - Rails 6,切换Git分支后架构文件与迁移文件不匹配
- testing - Testcafe:您要切换到的 iframe 的内容未加载
- java - java - 如何将包含用逗号分隔的数字的字符串转换为Java中的整数?
- javascript - Cloud Functions:exports.function = vs export const function = 有什么区别?
- postgresql - 用于 postgres 10 连接器的 debezium 1.2
- c# - 如何检测 webview2 中的鼠标点击(c#/vb.net)
- python - 获取产品主分类和子分类
- keras - 将 keras 模型转换为 coreml 时出错(“InputLayer”对象不可迭代)
- java - 使用由 WindowsAuthentication 保护的 IIS 上托管的 WebService 的 Java 问题