如果在主题列中找到特定字符串,我尝试在相应列中添加“是”:即,如果在“描述”列的条目中找到“视觉”,则应在“描述”列中返回“是” “视觉任务”栏。
它按预期工作,如第一个屏幕截图所示。
但是当我尝试使用 if 语句填充“视觉任务”列时,它无法按预期工作。
(注意:始终将代码发布到Q正文中反引号(
```
)之间的块中,不要使用图片)。
import pandas as pd
import numpy as np
data = {'Description': ['VisUAL MINIMAL',
'REPRODUCIBLE VISUAL',
'visul EXAMPLE']}
df_datasetcritic_2 = pd.DataFrame(data)
# create boolean series
boolean = df_datasetcritic_2['Description'].str.contains('visual', regex=False, case=False)
问题:如何添加列“Visual Task”:'Yes' if boolean == True, else '1'?
选项1
np.where
:df_datasetcritic_2['Visual Task'] = np.where(boolean, 'Yes', '1')
df_datasetcritic_2
Description Visual Task
0 VisUAL MINIMAL Yes
1 REPRODUCIBLE VISUAL Yes
2 visul EXAMPLE 1
选项2
Series.map
(或Series.replace
):df_datasetcritic_2['Visual Task'] = boolean.map({True: 'Yes', False: '1'})
# same result
OP的尝试存在问题
此处使用
if...else
语句没有意义:
is
,而您想要使用 ==
的地方。如果两个变量指向内存中的同一个对象,则 is
返回 True
。 ==
检查是否相等。比照。 这里。boolean is True
# answer: `False`; so, your code executes:
# df_datasetcritic_2['Visual Task'] = '1'
==
)会导致一个非常常见的错误:if boolean == True:
print('do stuff')
ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
if...else
中使用
Series.apply
。例如:
df_datasetcritic_2['Visual Task'] = boolean.apply(lambda x: 'Yes' if x == True else '1')
# same result
避免这样做。它会比上面的矢量化选项慢得多。进一步查看此处。