所以我有一个包含float64类型列的dataframe和一个包含字符串的object类型列
如果object列包含子字符串'abc',我想从float列中减去12。如果object列包含子字符串def,我想从float列中减去24。如果object列既不包含“abc”也不包含“def”,我希望保持float列的原样
示例:
Nmbr Strng
52 abcghi
80 defghi
10 ghijkl
预期产量:
Nmbr Strng
40 abcghi
56 defghi
10 ghijkl
我尝试了以下操作,但不断出现错误:
if df.Strng.str.contains("abc"):
df.Nmbr = (df.Nmbr - 12)
elif df.Strng.str.contains("def"):
df.Nmbr = (df.Nmbr - 24)
else:
df.Nmbr = df.Nmbr
我得到的错误如下:
915 raise ValueError("The truth value of a {0} is ambiguous. "
916 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
917 .format(self.__class__.__name__))
918
919 __bool__ = __nonzero__
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()
不ote:Line 917 是突出显示为错误的
发生错误的原因是您正在测试布尔级数是
True
还是False
。这是不可能的。您可以测试所有或任何值是否为True
,以返回一个布尔值,但这不是您想要的将计算矢量化而不是引入循环是一种很好的做法。下面是如何通过
.loc
访问器实现逻辑结果:
相关问题 更多 >
编程相关推荐