我正试图将一列附加到数据帧中,其值取决于字符串是否包含特定的子字符串。我会在这里解释。我在python上工作。
我有以下字符串(或者更具体地说,一个包含字符串的对象(:
color = "tigerbluetree"
然后我有以下数据帧:
Day Money
-----------------------
0 Day 1 3
1 Day 2 3
2 Day 3 5
3 Day 4 3
4 Day 5 2
5 Day 6 0
6 Day 7 0
7 Day 8 6
...
现在,我想创建一个名为Value
的新列。我希望CCD_ 2中的值是字符串CCD_;蓝色";。如果它确实包含子串"0";蓝色";,在这种情况下,我想把Money
列中的所有值都改为0。如果它不包含子串"0";蓝色";,那么我想让Money
列中的所有值保持原样。因此,我想根据上述信息生成以下数据帧:
Day Money
-----------------------
0 Day 1 0
1 Day 2 0
2 Day 3 0
3 Day 4 0
4 Day 5 0
5 Day 6 0
6 Day 7 0
7 Day 8 0
...
我已经尝试了以下代码:
df['Money'] = np.where(color.contains("blue"), 0, df['Money'])
我收到以下错误消息:
AttributeError: 'str' object has no attribute 'contains'
如何解决这个问题?我不知道为什么str.contains()
在这里不起作用,因为我正在处理一个字符串。
您可以使用普通条件赋值而不是np.where
,因为您不是在实际数据帧上进行比较,而是在单独的字符串上进行比较:
>>> color = "tigerbluetree"
>>> df['value'] = 0 if 'blue' in color else df['Money']
>>> df
Day Money value
0 Day 1 3 0
1 Day 2 3 0
2 Day 3 5 0
3 Day 4 3 0
4 Day 5 2 0
5 Day 6 0 0
6 Day 7 0 0
7 Day 8 6 0
同样在这个问题中,您提到要创建一个名为value
的新列,但您正试图覆盖列Money
字符串只有__contains__
属性,或者更多时候我们都使用in
方法。
因此使用in
:
df['Money'] = np.where("blue" in color, 0, df['Money'])
那么df
看起来像:
Day Money
0 Day 1 0
1 Day 2 0
2 Day 3 0
3 Day 4 0
4 Day 5 0
5 Day 6 0
6 Day 7 0
7 Day 8 0