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

2024-09-28 03:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是在CSV(link是https://github.com/pandas-dev/pandas/files/3496001/multiple_responses.zip)文件中有一个列“methods\u discussed”,它的值是family planning methods的名称,例如:

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),但输出与预期不匹配。可能雄性不育是雌性不育的子串,这对雄性不育是正确的。在index2的实际输出中显示如下。它必须显示为假,因为在index2的方法讨论栏中有女性灭菌

创建了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

代码中没有错误,但只在输出中


Tags: falsetruepandasmethodmalefemalemethodsdf1
1条回答
网友
1楼 · 发布于 2024-09-28 03:16:09

在模式周围使用单词boundary-\b\b来避免它,参数na=False也很适合在输出中避免NaNs-这里替换为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  

相关问题 更多 >

    热门问题