繁体   English   中英

如何更正python中通过str.contains生成的输出

[英]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 列中。

创建8种计划生育方法清单

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM