![](/img/trans.png)
[英]Python 'str.contains' function not returning correct values
[英]How to correct the output generated through str.contains in python
我只有一个 CSV 列“methods_discussed”(链接是https://github.com/pandas-dev/pandas/files/3496001/multiple_responses.zip )文件具有家庭计划方法的值名称,例如:
methods_discussed
emergency
female_sterilization
male_sterilization
iud
NaN
injectables male_condoms
male_condoms
female_sterilization male_sterilization
injectables
iud male_condoms
我使用了df1["methods_discussed"].str.contains(pat = method)
但输出与预期不匹配。 可能male_sterilization 是female_sterilization 的子串,它显示male_sterilization 为TRUE。 它在 index2 处的实际输出中显示如下。 它必须显示 FALSE,因为female_sterilization 在index2 的method_discussed 列中。
method_names = ['female_condoms', 'emergency', 'male_condoms', 'pill', 'injectables', 'iud', 'male_sterilization', 'female_sterilization']
for method in method_names:
df1[method]=df1["methods_discussed"].str.contains(pat = method)
df1.head(2)
预期产出
id | methods_discussed | female_condoms | emergency | male_condoms | pill | injectables | iud | male_sterilization | female_sterilization
1 | emergency | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE
2 | female_sterilization | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | ***FALSE*** | TRUE
实际产量
id | methods_discussed | female_condoms | emergency | male_condoms | pill | injectables | iud | male_sterilization | female_sterilization
1 | emergency | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE
2 | female_sterilization | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | ***TRUE*** | TRUE
代码中没有错误,但仅在输出中
在模式周围使用单词边界 - \\b\\b
避免它,参数na=False
也可以避免输出中的NaN
s - 这里替换为False
:
for method in method_names:
df1[method]=df1["methods_discussed"].str.contains(pat = r"\b{}\b".format(method), na=False)
print (df1)
methods_discussed female_condoms emergency \
0 emergency False True
1 female_sterilization False False
2 male_sterilization False False
3 iud False False
4 NaN False False
5 injectables male_condoms False False
6 male_condoms False False
7 female_sterilization male_sterilization False False
8 injectables False False
9 iud male_condoms False False
male_condoms pill injectables iud male_sterilization \
0 False False False False False
1 False False False False False
2 False False False False True
3 False False False True False
4 False False False False False
5 True False True False False
6 True False False False False
7 False False False False True
8 False False True False False
9 True False False True False
female_sterilization
0 False
1 True
2 False
3 False
4 False
5 False
6 False
7 True
8 False
9 False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.